2011-02-05 113 views
2

對於我的一個練習,我們需要逐行閱讀並僅使用getchar和printf輸出。我遵循K & R,其中一個例子顯示了使用getchar和putchar。從我讀到的,getchar()一次讀取一個字符,直到EOF。我想要做的是一次讀取一個字符,直到行尾,但存儲任何寫入char變量的字符。所以如果輸入Hello,World !,它會將它全部存儲在一個變量中。我試圖使用strstr和strcat,但沒有成功。getchar()和逐行讀取

while ((c = getchar()) != EOF) 
{ 
    printf ("%c", c); 
} 
return 0; 
+0

難道你不能在一行中存儲所有的字符,只是讀取數組的每個字符,直到你有一個空字符? – stanigator 2011-02-05 19:15:38

+0

@stanigator:那麼你必須處理內存不足時發生的情況。一種更好的方法是一次忘掉一些行並讀取一些中等大小的固定的「N」個字符。 – 2011-02-05 20:29:40

回答

4

您將需要多個字符來存儲行。使用例如如下所示:

#define MAX_LINE 256 
char line[MAX_LINE]; 
int line_length = 0; 

//loop until getchar() returns eof 
//check that we don't exceed the line array , - 1 to make room 
//for the nul terminator 
while ((c = getchar()) != EOF && line_length < MAX_LINE - 1) { 

    line[line_length] = c; 
    line_length++; 
    //the above 2 lines could be combined more idiomatically as: 
    // line[line_length++] = c; 
} 
//terminate the array, so it can be used as a string 
line[line_length] = 0; 
printf("%s\n",line); 
return 0; 

使用此功能,您無法讀取長度超過固定大小(本例中爲255)的行。 K & R會稍後教會你動態分配的內存,你可以用它來讀取長而長的行。