2016-08-17 6 views
-2
FILE *fp; 
char name[50]; 
fp=fopen("stu.txt","r"); 
while(fgets(name,50,fp)!=NULL) 
{ 

    printf(" %s",name); 
    fgets(name,50,fp); 

} 
fclose(fp); 

В моем файле есть 4 имени в 4 разных строках, но на выходе отображаются только 1-е и 3-е имена. Что-то не так? Я знаю, что это очень просто, но это заняло много мое время.Чтение строк из файла

+3

Удалить второй 'fgets (имя, 50, Fp),' –

+1

Параметр 'while' условие цикла не определяет некоторое условие, которое заставит цикл прекратить всякий раз, когда это происходит внутри тела - это выражение который фактически оценивается перед каждым (потенциальным) циклом цикла, чтобы решить, следует ли выполнять тело цикла (что происходит, если результат отличен от нуля). Помещение 'fgets()' в условие цикла будет вызывать его, когда условие проверяется перед каждым прохождением цикла ... и 'fgets()' внутри тела цикла не зависит от него (ваш цикл заканчивается только тогда, когда 'fgets () 'call в условии возвращает' NULL', но не тогда, когда это делает тело в цикле). – Dmitri

ответ

1

Вы (е) получение в while заявления и внутри блок петли, так что вы опережение позиции файла без использования, что вы читали во внутреннем вызове. Попробуйте следующее:

while(fgets(name,50,fp)!=NULL) 
{ 
    printf(" %s",name); 
} 
0

Снимите fgets с корпуса петли. fgets в выражении while уже выполняет эту работу.

-2
#include <stdio.h> 

int main() 
{ 

    FILE *fp; 
    int c; 

    fp = fopen("file.txt","r"); 
    while(1) 
    { 
     c = fgetc(fp); 
     if(feof(fp)) 
     { 
     break; 
     } 
     printf("%c", c); 
    } 
    fclose(fp); 
    return(0); 
    } 
+1

Код OP был основан на линии. Ваш характер основан на символах. – DevSolar

+0

#include #include #include using namespace std; int main (int argc, char * argv []) { QCoreApplication a (argc, argv); string sLine = ""; ifstream infile; infile.open ("temp.txt"); while (! Infile.eof()) { getline (infile, sLine); cout << sLine << endl; } infile.close(); cout << "Читать файл заполнен!" << endl; return a.exec(); } # crdeit apolo chung –

+0

Код OP - C (и вопрос, помеченный как таковой). Код в вашем комментарии - C++. И он печатает последнюю строку дважды. – DevSolar

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