2015-09-20 3 views
0

Я новичок в программировании на языке C. Я пытаюсь практиковать простое упражнение: это:Требуется уточнение относительно функции получения в C

Напишите программу, которая читает строки ввода один за другим до тех пор, пока не будет достигнут конец файла, не определит длину каждой строки ввода, а затем распечатает только самая длинная линия, которая была найдена. Вы можете предположить, что максимальная длина входной строки составляет 1000 символов.

Мой код наклеен здесь:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#define MAX_LEN 1000 

int main(void) 
{ 
    char line[MAX_LEN], line_temp[MAX_LEN]; 
    int largest_line_size = 0; 
    int current_line_size; 

    while (gets (line_temp) != NULL) 
    { 
     if ((current_line_size = strlen(line_temp)) > largest_line_size) 
     { 
      strcpy(line, line_temp); 
      largest_line_size = current_line_size; 
     } 

     /*printf("%s\n", line); */ 
    } 
    printf("%d", largest_line_size); 
    printf("%s", line); 

    return EXIT_SUCCESS; 

} 

Проблема заключается в том, что код работает, принимает входные данные, но я никогда не добраться до точки, где разрывы цикла. Как я могу найти указатель NULL при использовании функции gets()?

Ваша помощь очень ценится.

Спасибо,

+0

_Until конец файла достигнут ..._ не уверен, что вы делаете правильно, IMO ?! – Bateman

+2

Вопросы говорят до тех пор, пока не будет достигнут конец файла. Это не значит, что это чтение из файла, это вполне может быть stdin. В любом случае, как я могу проверить, не предоставлен ли пользователем дополнительный поток через поток stdin? – user3317287

ответ

0

Я сам выяснил проблему. Как вы можете завершить цикл в приведенном выше коде при чтении символов из stdin, нажав CTRL-D (Unix) или CTRL-Z в Windows. В обоих случаях запускается EOF, и команда gets или fgets возвращает указатель NULL. Извините за потраченное время, если это произойдет.

Благодаря

0

Вопрос говорит Вы должны прочитать данные из файла.
Почему вы принимаете его во время выполнения от пользователя?

Например, если fr является файлом, вы можете сделать следующее.

fr = fopen ("filename", "rt"); /* open the file for reading */ 
/* filename is the name of the file */ 
/* "rt" means open the file for reading text */ 

while(fgets(line_temp,MAX_LEN, fr) != NULL) 
{ //...do your stuff } 

Обратите внимание, что fgets() возвращает NULL, если нет больше строк в файле.

+0

Это должен быть комментарий, а не ответ – tangrs

+1

ну, я нахожусь в главе в книге, в которой я следую, где чтение/запись в файл не обсуждается. Хотя вопрос говорит о конце файла, это не значит, что входы считываются из файла. это вполне может быть от stdin. Как вы можете получить указатель NULL при чтении символов из stdin? какие входные/ключевые штрихи вам нужно предоставить на уровне stdin? – user3317287

+0

@ user3317287 NULL == '\ 0' == eof – piezol

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