Обнуление потока вывода из файла - C (СИ)
Формулировка задачи:
Есть файл с данными типа : 11 22 5 s 6 7
И такой кусочек кода:
Вопрос заключается в следующем: вызов getc(f) забирает первый символ из файла (это 11), но поскольку вызов этой функции существует лишь для проверки условия, я хочу далее (в цикле) при использовании fscanf начать считывание с тех же одинадцати (с первого символа из файла). Думал использовать fflush, но не помогло: все равно fscanf начинает считывание со следующего символа (то есть 22). Подскажите, пожалуйста, как выбраться из этой ситуации
FILE *f = fopen(name, "r");
if (f == NULL)
return 1;
if (getc(f) == EOF)
return 2;
while (feof(f) == 0)
{
fscanf(f, "%i", &x[i]);
......Решение задачи: «Обнуление потока вывода из файла»
textual
Листинг программы
#include <stdio.h>
int main(){
freopen("1.txt","r",stdin);
int x;
scanf("%d", &x);
printf("%d\n", x);
fclose(stdin);
freopen("1.txt","r",stdin);
while (scanf("%d", &x) != EOF){
printf("%d ", x);
}
return 0;
}
Объяснение кода листинга программы
- Включаем заголовочный файл stdio.h, который содержит функции для работы с потоком ввода/вывода
- Закрываем стандартный поток ввода (stdin) и открываем файл 1.txt для чтения
- Считываем из файла целочисленное значение в переменную x с помощью функции scanf
- Выводим значение x на экран с помощью функции printf
- Закрываем файловый поток (stdin)
- Открываем файл 1.txt для чтения
- В цикле while считываем из файла целочисленные значения в переменную x с помощью функции scanf
- Выводим значение x на экран с помощью функции printf, добавляя пробел в конце
- Возвращаем 0, чтобы указать, что программа успешно завершилась