Чтение из файла слова (неправильный размер) - 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
- это символ новой строки, который указывает на то, что информация о студенте должна быть выведена на новую строку. Таким образом, каждый элемент информации о студенте выводится на новой строке в следующем формате: фамилия, имя, отчество, название университета, номер группы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д