Символьные строки. почему не работает? (си) - C (СИ)
Формулировка задачи:
В файле содержится список:
Ivanov/1998 Sidorov/1990 Nekrasov/1991Нужно найти самого молодого и вывести его фамилию. При запуске выходит "Прекращена работа программы" Dev C++
#include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> int main() { char *s,*temp,str[80],*fam,*syear; FILE *in; in=fopen("C:/data/students.dat","r"); while (fgets(str,80,in)) { temp=strstr(s,"/"); *temp=0; syear="1900"; if (strcmp(syear,temp+1)>0) { strcpy(fam,str); strcpy(syear,temp+1); } } printf("Samiy molodoy\n%s",fam); getch(); }
Решение задачи: «Символьные строки. почему не работает? (си)»
textual
Листинг программы
#include <stdio.h> #include <conio.h> #include <string.h> #include <limits.h> #define N 80 int main(void) { char str[N], fam[N], min_fam[N]; unsigned int year, min_year; min_year = UINT_MAX; FILE *in = fopen("C:\\data\\students.dat", "r"); if ( !in ) return 1; while ( fgets(str, N, in) ) { sscanf(str, "%s\\%u", fam, &year); if (year < min_year) { strcpy(min_fam, fam); min_year = year; } printf("Samiy molodoy\n%s", min_fam); fclose(in); getch(); }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
stdio.h
для работы с вводом/выводомconio.h
для работы с клавиатурой и мышью (необходимо для функцииgetch
)string.h
для работы со строкамиlimits.h
для определения максимального значения типаunsigned int
- Определяем константы и переменные:
N
- размер массива строкyear
иmin_year
- переменные для хранения года рождения студента и минимального года рождения соответственноstr
,fam
,min_fam
- массивы строк для хранения имени, фамилии и минимальной фамилии студента
- Открываем файл для чтения:
- Используем функцию
fopen
для открытия файлаC:\\data\\students.dat
в режиме чтения
- Используем функцию
- Проверяем успешность открытия файла:
- Если файл не открылся, программа завершается с возвратом значения 1
- Читаем данные из файла:
- Используем цикл
while
для чтения строк из файла с помощью функцииfgets
- В каждой строке ищем фамилию и год рождения студента с помощью функции
sscanf
- Сравниваем год рождения текущего студента с минимальным годом рождения
- Если текущий год рождения меньше минимального, обновляем значения переменных
min_fam
иmin_year
- Используем цикл
- Выводим результат:
- Выводим приветствие
Samiy molodoy
- Выводим фамилию студента с минимальным годом рождения
- Выводим приветствие
- Закрываем файл и ожидаем нажатия клавиши:
- Используем функцию
fclose
для закрытия файла - Используем функцию
getch
для ожидания нажатия клавиши В данном коде не указано, что именно не работает. Если возникают проблемы, необходимо проверить корректность данных в файлеC:\\data\\students.dat
и правильность форматирования строк в этом файле. Также стоит проверить, открывается ли файл и корректно ли работает цикл чтения данных из файла.
- Используем функцию
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д