Обнуление потока вывода из файла - C (СИ)

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

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

Есть файл с данными типа : 11 22 5 s 6 7 И такой кусочек кода:
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]);
                ......
Вопрос заключается в следующем: вызов getc(f) забирает первый символ из файла (это 11), но поскольку вызов этой функции существует лишь для проверки условия, я хочу далее (в цикле) при использовании fscanf начать считывание с тех же одинадцати (с первого символа из файла). Думал использовать fflush, но не помогло: все равно fscanf начинает считывание со следующего символа (то есть 22). Подскажите, пожалуйста, как выбраться из этой ситуации

Решение задачи: «Обнуление потока вывода из файла»

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;
}

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

  1. Включаем заголовочный файл stdio.h, который содержит функции для работы с потоком ввода/вывода
  2. Закрываем стандартный поток ввода (stdin) и открываем файл 1.txt для чтения
  3. Считываем из файла целочисленное значение в переменную x с помощью функции scanf
  4. Выводим значение x на экран с помощью функции printf
  5. Закрываем файловый поток (stdin)
  6. Открываем файл 1.txt для чтения
  7. В цикле while считываем из файла целочисленные значения в переменную x с помощью функции scanf
  8. Выводим значение x на экран с помощью функции printf, добавляя пробел в конце
  9. Возвращаем 0, чтобы указать, что программа успешно завершилась

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


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

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

7   голосов , оценка 4.143 из 5
Похожие ответы