Как мне использовать scanf () с fopen - PullRequest
1 голос
/ 24 сентября 2008

Я пишу программу, и у меня возникают проблемы при совместной работе scanf и fopen.

Из того, что я могу сказать, мои ошибочные строки выглядят так:

FiLE * DataFile
DataFile = fopen("StcWx.txt","r");
scanf(DataFile, "%i %i %i %.2f %i %i", &Year, &Month, &Day, &Precip, &High, &Low);

Файл, из которого он открывается, содержит список данных о погоде, который выглядит следующим образом:

1944    4   12  0   58  24
1944    4   13  0.4 58  29
1944    4   14  0.54    42  29
1944    4   15  0   43  27

(Эти пробелы являются табуляциями)

Отображаемая ошибка: «[Предупреждение] передача аргумента 1` scanf 'из несовместимого типа указателя »

Кто-нибудь может мне помочь?

Ответы [ 4 ]

15 голосов
/ 24 сентября 2008

Я думаю, что вы хотите fscanf не scanf .

2 голосов
/ 26 сентября 2008

Ваш код выглядит так, как будто он использует fscanf, а не scanf.

Я бы настоятельно рекомендовал использовать fgets и sscanf, а не напрямую вызывать fscanf.

fscanf может выйти из строя способами, которые оставляют сомнение в том, где находится указатель вашего файла. Использование fgets для получения целых строк и sscanf для сканирования строк означает, что вы всегда знаете состояние указателя файла, и очень легко выполнить резервное копирование до начала строки (строка все еще находится в памяти).

1 голос
/ 24 сентября 2008

Вы используете неправильную функцию. Вы должны использовать fscanf.

0 голосов
/ 08 февраля 2019

Как насчет:

freopen ("StcWx.txt","r",stdin);

scanf("%i %i %i %.2f %i %i", &Year, &Month, &Day, &Precip, &High, &Low);

http://www.cplusplus.com/reference/cstdio/freopen/

...