2015-09-20 66 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; 

} 

的問題是,代碼運行,接受輸入,但我從來沒有到一個地步,while循環中斷。如何在使用gets()函數時遇到NULL指針?

非常感謝您的幫助。

感謝,

+0

_直到文件已達到......_不確定你做的是正確的事情,國際海事組織?! – Bateman

+2

問題說直到達到文件結尾。這並不意味着它從文件中讀取,它可能是stdin。在任何情況下,我如何檢查用戶是否通過stdin流不提供更多輸入? – user3317287

回答

0

我已經找到了自己的問題。從stdin讀取字符時,通過在Windows中按CTRL-D(Unix)或CTRL-Z,可以終止上述代碼中的循環。無論哪種情況,都會觸發一個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

好吧,我在C的一個章節,我正在遵循的書,沒有討論讀/寫文件。儘管問題是文件結束,但並不意味着輸入是從文件中讀取的。它可能來自stdin。從標準輸入讀取字符時,如何獲得NULL指針?你需要在stdin中提供什麼輸入/擊鍵? – user3317287

+0

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