Посмотрите на ваш fscanf
шаблон:
fscanf(fp, "%c,%d", &a.activity, &a.value);
Тогда в вашем формате файла:
i 23
i 56
i 19
i 20
i 44
Я не вижу запятых. Вместо этого попробуйте пробел, и обязательно примите во внимание новую строку:
fscanf(fp, "%c %d\n", &a.activity, &a.value);
Помните, fscanf
не просто читает значения по порядку, он учитывает фиксированные символы, окружающие символы подстановки.
Редактировать - также важно, указал Кит в комментариях:
Обратите внимание, что использование \n
в строке формата fscanf
может быть немного
вводит в заблуждение. Любой символ пробела (включая \n
) соответствует нулю или
больше пробелов. Таким образом, добавление \n
работает для данного
вход - но это также будет работать, если все входные данные были в одной строке
разделенные пробелами или табуляцией: i 23 i 56 i 19 i 20 i 44
. Если ты действительно
для ввода строки, используйте fgets()
(не gets()
) для чтения строки
за раз в строку, затем sscanf()
для разбора строки. (Все
У *scanf()
функций есть проблемы с переполнением чисел.)
Надеюсь, это поможет!
(PS: о, и я исправил форматирование вашего кода. В следующий раз, когда вы отправите сообщение, уделите секунду, чтобы убедиться, что код выглядит правильно с отступом и прочим. получить гораздо меньше отзывов на ваши вопросы!)