Чтение из файла слова (неправильный размер) - C (СИ)
Формулировка задачи:
При чтении фрагмента в переменную я указываю [10] и получается, что из строки
Иванов Иван Иванович МГУ 250145
Иванов Ив записывается в первую переменную, ан Иванови во вторую, ну и остальное делится уже
А как сделать, чтобы в переменную записывалось полностью слово без лишнего?
С учетом того, что в каждой следующей строке уже будут другие данные и другая размерность
#include<stdio.h>
#include<locale.h>
#include <stdlib.h>
#include <conio.h>
#include < string.h >
#define size 100
typedef struct
{
char famly[20];
char name[20];
char sname[20];
char univer[20];
char group[20];
} Student;
int main()
{
setlocale(LC_ALL, "Russian");
int i = 0;
Student stud[size];
FILE *fp = fopen("C:\\Users\\Ekaterina\\Desktop\\fin.txt", "r");
if (NULL == fp)
{
printf("Не удалось открыть файл!");
return 0;
}
while (!feof(fp))
{
//for (i = 0; feof(fp); i++)
{
fgets(stud[i].famly, 10, fp);
printf("%s", stud[i].famly);
fgets(stud[i].name, 10, fp);
printf("%s", stud[i].name);
fgets(stud[i].sname, 10, fp);
printf("%s", stud[i].sname);
fgets(stud[i].univer, 10, fp);
printf("%s", stud[i].univer);
fgets(stud[i].group, 10, fp);
printf("%s", stud[i].group);
}
}
fclose(fp);
return 0;
}
При чтении из файла все параметры считываются правильно кроме номера группы, непонятные числа появляются ???!!!
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <stdlib.h>
#include <string.h>
#define size 100
typedef struct
{
char famly[20];
char fName[20];
char sName[20];
char univer[20];
int group;
} Student;
int main(int argc, char *argv[])
{
setlocale(LC_ALL, "Russian");
int group;
char *univer="";
Student stud[7];
FILE *fp = fopen("C:\\Users\\Ekaterina\\Desktop\\fin.txt", "r");
for (int i = 0; !feof(fp); i++)
{
fscanf(fp, "%s %s %s %s %d", stud[i].famly, stud[i].fName, stud[i].sName, stud[i].univer, &stud[i].group);
printf("%s %s %s %s %d\n", stud[i].famly, stud[i].fName, stud[i].sName, stud[i].univer, &stud[i].group);
}
printf("Введите университет - ");
scanf("%s", &univer);
printf("Введите номер группы - ");
scanf("%d", &group);
//printf("%s %s %s %s %d\n", stud[i].famly, stud[i].fName, stud[i].sName, stud[i].univer, &stud[i].group);
FILE *fo = fopen("C:\\Users\\Ekaterina\\Desktop\\fo.txt", "w+");
for (int i = 0; i<7; i++)
if ((stud[i].group == group) && (strcmp(stud[i].univer, univer) == 0))
{
printf("%s %s %s %s %d\n", stud[i].famly, stud[i].fName, stud[i].sName, stud[i].univer, stud[i].group);
fprintf(fo, "%s %s %s %s %d\n", stud[i].famly, stud[i].fName, stud[i].sName, stud[i].univer, stud[i].group);
}
return 0;
}Решение задачи: «Чтение из файла слова (неправильный размер)»
textual
Листинг программы
printf("%s %s %s %s %d\n", stud[i].famly, stud[i].fName, stud[i].sName, stud[i].univer, stud[i].group);
Объяснение кода листинга программы
В данном коде происходит вывод информации о студенте на экран. Каждый элемент информации представлен в формате %s %s %s %s %d\n, где:
%s- это спецификатор формата, который указывает на то, что следующий элемент должен быть выведен как строка.stud[i].famly- это название переменной, которая содержит фамилию студента.stud[i].fName- это название переменной, которая содержит имя студента.stud[i].sName- это название переменной, которая содержит отчество студента.stud[i].univer- это название переменной, которая содержит название университета студента.stud[i].group- это название переменной, которая содержит номер группы студента.%d- это спецификатор формата, который указывает на то, что следующий элемент должен быть выведен как целое число.\n- это символ новой строки, который указывает на то, что информация о студенте должна быть выведена на новую строку. Таким образом, каждый элемент информации о студенте выводится на новой строке в следующем формате: фамилия, имя, отчество, название университета, номер группы.