2016-09-05 4 views
2

Я пытаюсь читать строки за строкой из файла и распечатывать строку. Но когда я запускаю код, он начинает печатать строки, начинающиеся посередине.C - строки чтения из файла

char temp[300]; 

if (input == NULL) { 
    printf("Can't open input file.\n"); 
    exit(-1); 
} 

while (!feof(input)) { 
    fgets(temp, 300, input); 
    printf("%s \n", temp); 
} 
fclose(input); 

Любые причины для его начала посередине?

Edit: Так и пример того, что я имею в виду в середине, что у меня есть список, как этот

7,12 Angry Men,1957 
95,2001: A Space Odyssey,1968 
211,8 and a Half,1963 
190,A Beautiful Mind,2001 
68,A Clockwork Orange,1971 
223,A Fistful of Dollars,1964 
108,A Separation,2011 
233,A Streetcar Named Desire,1951 
40,Alien,1979 
58,Aliens,1986 
96,All About Eve,1950 
224,All Quiet on the Western Front,1930 
250,All the President's Men,1976 
91,Amadeus,1984 
69,Amelie,2001 
54,American Beauty,1999 
33,American History X,1998 
189,Amores Perros,2000 

и когда я добираюсь до Printf он показывает только этот

58,Aliens,1986 
96,All About Eve,1950 
224,All Quiet on the Western Front,1930 
250,All the President's Men,1976 
91,Amadeus,1984 
69,Amelie,2001 
54,American Beauty,1999 
33,American History X,1998 
189,Amores Perros,2000 

edit2 : Я сделал изменение в программе, чтобы избавиться от \ n в printf

while (fgets(temp, sizeof(temp), input) != NULL) { 
     printf("%s", temp); 
    } 

и это устранило проблему. Есть ли причина, по которой \ n вызвала эту проблему?

+0

Проведите следующий эксперимент: проведите вывод вашей программы в файл; затем посмотрите на этот файл с помощью (хорошего!) обычного текстового редактора. Все ли линии там? – usr2564301

+0

Я открыл файл в блокноте и сравнил его с моими результатами, и именно так я заметил недостающие элементы в списке. –

+0

Молодцы! (Причина, о которой я спрашивал, заключалась в том, что «не видно» могло означать, что они были перезаписаны * только на экране * из-за бродячих возвратов каретки. У меня это было.) – usr2564301

ответ

3

Посмотрите Why is “while (!feof (file))” always wrong?

fgets достаточно:

while (fgets(temp, 300, input) != NULL) { 
    printf("%s \n", temp); 
} 

Кроме того, не использовать магические числа как 300, изменения в

while (fgets(temp, sizeof temp, input) != NULL) { 
    printf("%s \n", temp); 
} 

он начинает распечатку линии, начинающиеся в середине

Отметьте, что fgets включает в себя завершающую новую строку '\n', и нет необходимости включать ее в printf, вы имеете в виду это по "посередине"?

+0

Спасибо! Тем не менее, я все еще не получаю весь список из файла. Он все еще начинается посередине. Так что, если в списке было яблоко, банан, виноград, ананас, киви, программа выводит только виноград, ананас, киви. –

+0

. Неужели вы уверены, что не используете старую версию своего файла? –

+0

Нет, я попробовал сохранить и снова открыть его и все же дал мне те же результаты. –

Смежные вопросы