freopen () в C вызывает бесконечный цикл! - PullRequest
1 голос
/ 11 апреля 2011

Я использую функцию freopen () в C для чтения данных из файла Data.txt и записи этих же данных в выходной файл Output.txt . Это кодЯ пишу для этого.

#include<stdio.h>
#include<conio.h>

int main(void)
{
    int i,diff,number_of_inputs,num1,num2;
    freopen("Data.txt","r",stdin);
    freopen("Output.txt","w",stdout);
    scanf("%d",&number_of_inputs);
    for(i=0;i<number_of_inputs;i++)
    {
        scanf("%d %d",&num1,&num2);
        printf("%d %d",num1,num2);  
    }
    fclose(stdin);
    fclose(stdout);
    getch();
    return 0;
}

Файл Data.txt содержит:
3
10 12
10 14
100 200

Но выходной файл содержит большой объем чисел мусора , создающих впечатление бесконечного цикла. Может кто-нибудь сказать мне, что происходит не так?

Ответы [ 3 ]

2 голосов
/ 11 апреля 2011

Ваш код должен проверить возвращаемые значения из freopen() и scanf().

Неожиданное возвращаемое значение от любой из этих функций даст вам подсказки о том, что идет не так.

freopen() возвращает NULL для обозначения ошибки.

scanf() возвращает количество преобразованных элементов или EOF.

В любом случае ваш код может проверить значение errno, чтобы выяснить причину ошибки. Возможно, вы захотите распечатать его, используя perror().

2 голосов
/ 11 апреля 2011

Вам нужно запустить свой код через отладчик.Я думаю, тогда, вероятно, будет ослепительно очевидно, в чем проблема.

Сказав это, вы делаете нет проверки ошибок при любых вызовах вашей библиотеки.Если какой-либо из них потерпит неудачу, у вас просто будут значения мусора в ваших переменных.

1 голос
/ 11 апреля 2011

Помимо отсутствия перевода строки, которое, кажется, работает нормально на моей машине - вывод равен 10 1210 14100 200, который при соответствующем переводе строки дает

10 12
10 14
100 200

.

Кроме того, getch() - странный выбор, учитывая, что вы только что позвонили fclose() на stdin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...