2016-05-29 5 views
0

Я постоянно работаю над этим кодом, и я не могу понять, что не так с моим кодом. Я пытаюсь сделать так, чтобы программа принимала два аргумента командной строки, первая из которых была именем текстового файла для чтения, а вторая - количеством строк в файле для печати. Я попытался сделать цикл, который подсчитывает количество строк и добавляет их каждый раз, когда он достигает нового символа линии, и другой цикл, который печатает строки текста, но у меня много проблем. Я только ознакомлен с классом программирования, и это язык C, и я пробовал так много способов сделать эту работу. Вот функция в моем коде, которая должна это сделать. любая помощь будет принята с благодарностью!Как распечатать последние n строк файла с помощью C?

char ch = 0; 
long num_lines = 0; 

while(!feof(fileequals)){ 
    ch = fgetc(fileequals); 
    if(ch == '\n'){ 
     num_lines++; 
    } 
} 
fseek(fileequals, 0, SEEK_SET); 

const int length = 100; 
char line[length]; 
char *c = 0; 
long line_count = 0; 

if(num_rows_to_read > num_lines){ 
    num_rows_to_read = num_lines; 
} 

do{ 
    c = fgets(line, length, fileequals); 
    if (c != NULL && (line_count >= num_lines - num_rows_to_read)){ 
     printf("%s", line); 
     line_count++; 
    } 
    else{ 
     continue; 
    } 
}while (c != NULL); 

}

+1

[? Почему «в то время как (! Feof (файл))» всегда ошибочны] (http://stackoverflow.com/questions/5431941/why-is- while-feof-file-always-wrong) – kaylum

+0

И в чем же проблема с вашей текущей программой? Укажите данные, ожидаемый результат и фактический результат. И предлагаю вам использовать отладчик для перехода через вашу программу, чтобы узнать, где все начинает идти не так. – kaylum

+0

вход должен быть любым файлом со словами в нем, а вывод должен быть последними n строками файла, но когда я использую этот код, я не получаю никакого вывода, потому что по какой-то причине он никогда не входит цикл, который печатает каждую строку – emmag

ответ

0

"line_count ++;" должен выполняться каждый раз после выполнения функции fgets(), независимо от оператора if. Петля делать-то время должно быть так:

do{ 
    c = fgets(line, length, fileequals); 
    if (c != NULL && (line_count >= num_lines - num_rows_to_read)){ 
     printf("%s", line);    
    } 
    line_count++; 
}while (c != NULL); 
+0

thankyou! это фиксировало это, и оно отлично работает! – emmag

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