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