2014-10-04 155 views
-3
while((c= getchar()) != '\n' && c != EOF); 

我在使用gets()輸入字符串時遇到了問題。我在google上發現它在輸入緩衝區中保留了'\ n'的值。我在這裏搜索並找到了上面的代碼來解決我的問題。但是我並不完全瞭解它。這是做什麼?任何人都請賜教。這是幹什麼的:while((c = getchar())!=' n'&& c!= EOF);

+2

不,你需要自己學習C++,然後在這裏發表一個問題 – 2014-10-04 12:30:55

+0

我把'C++'標記改爲'C'標記,因爲它純粹是'C',而不是'C++'。 – Benio 2014-10-04 12:34:41

+5

@Benio不這樣做。只要它是有效的C++代碼,它也是有效的C並不重要。有時差異很重要。 – 2014-10-04 12:37:59

回答

2

該代碼引入了一個while -loop。其退出條件分配整數cgetchar()返回的值,並檢查它是否等於換行符('\n')或EOF。如果是,則退出循環。如果不是,則提取下一個字符,依此類推。

該代碼基本上跳過所有字符,直到到達下一個換行符或EOF。它相當於:

for (;;) 
{ 
    c = getchar(); // c has been declared elsewhere 
    if (c == '\n' || c == EOF) 
     break; 
} 
+0

是啊!這種方式比單純的濃縮要容易得多。 +1 – Adi 2014-10-04 12:46:00

+0

@gotolabeladi,你沒有足夠的代表upvote/+ 1,但你仍然可以接受它 – 2014-10-04 13:03:09

3

C++中的賦值也會產生被賦值的值。因此c= getchar()正在讀取文件中的下一個字符,而(c= getchar()) != '\n'正在將該讀取的字符與新行字符進行比較。還有另外一個測試是爲了確保特殊值EOF的值,以確保在到達文件末尾時它不會繼續嘗試讀取。

while和結束分號之間沒有聲明,因爲沒有其他任何事情需要完成,所以您將輸入信息丟棄。

+0

所以基本上它是在我輸入字符串後,它讀取字符串,直到它找到一個新的行字符和EOF ie -1 ?? – Adi 2014-10-04 12:42:01

+2

@gotolabeladi直到它找到一個新的行字符***或*** EOF。 – Boann 2014-10-04 14:13:05