Символьные строки. почему не работает? (си) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

В файле содержится список:

Ivanov/1998 Sidorov/1990 Nekrasov/1991

Нужно найти самого молодого и вывести его фамилию. При запуске выходит "Прекращена работа программы" Dev C++

Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. int main()
  6. {
  7. char *s,*temp,str[80],*fam,*syear;
  8. FILE *in;
  9. in=fopen("C:/data/students.dat","r");
  10. while (fgets(str,80,in))
  11. {
  12. temp=strstr(s,"/");
  13. *temp=0;
  14. syear="1900";
  15. if (strcmp(syear,temp+1)>0)
  16. {
  17. strcpy(fam,str);
  18. strcpy(syear,temp+1);
  19. }
  20. }
  21. printf("Samiy molodoy\n%s",fam);
  22. getch();
  23. }

Решение задачи: «Символьные строки. почему не работает? (си)»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <limits.h>
  5.  
  6. #define N 80
  7.  
  8. int main(void)
  9. {
  10.     char str[N], fam[N], min_fam[N];
  11.     unsigned int year, min_year;
  12.     min_year = UINT_MAX;
  13.     FILE *in = fopen("C:\\data\\students.dat", "r");
  14.  
  15.     if ( !in )
  16.         return 1;
  17.  
  18.     while ( fgets(str, N, in) ) {
  19.         sscanf(str, "%s\\%u", fam, &year);
  20.         if (year < min_year) {
  21.             strcpy(min_fam, fam);
  22.             min_year = year;
  23.     }
  24.     printf("Samiy molodoy\n%s", min_fam);
  25.     fclose(in);
  26.     getch();
  27. }

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы:
    • stdio.h для работы с вводом/выводом
    • conio.h для работы с клавиатурой и мышью (необходимо для функции getch)
    • string.h для работы со строками
    • limits.h для определения максимального значения типа unsigned int
  2. Определяем константы и переменные:
    • N - размер массива строк
    • year и min_year - переменные для хранения года рождения студента и минимального года рождения соответственно
    • str, fam, min_fam - массивы строк для хранения имени, фамилии и минимальной фамилии студента
  3. Открываем файл для чтения:
    • Используем функцию fopen для открытия файла C:\\data\\students.dat в режиме чтения
  4. Проверяем успешность открытия файла:
    • Если файл не открылся, программа завершается с возвратом значения 1
  5. Читаем данные из файла:
    • Используем цикл while для чтения строк из файла с помощью функции fgets
    • В каждой строке ищем фамилию и год рождения студента с помощью функции sscanf
    • Сравниваем год рождения текущего студента с минимальным годом рождения
    • Если текущий год рождения меньше минимального, обновляем значения переменных min_fam и min_year
  6. Выводим результат:
    • Выводим приветствие Samiy molodoy
    • Выводим фамилию студента с минимальным годом рождения
  7. Закрываем файл и ожидаем нажатия клавиши:
    • Используем функцию fclose для закрытия файла
    • Используем функцию getch для ожидания нажатия клавиши В данном коде не указано, что именно не работает. Если возникают проблемы, необходимо проверить корректность данных в файле C:\\data\\students.dat и правильность форматирования строк в этом файле. Также стоит проверить, открывается ли файл и корректно ли работает цикл чтения данных из файла.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы