[英]Condition in while loop using cin
我有以下代碼
//in main
int x;
while ( cin>>x ){
// code goes here
}
現在,我知道此循環將執行到讀取x
失敗為止(發生類型不匹配時發生)
因此,按char
可以使我走出循環,因為x
的類型為int
並且不會從輸入流中讀取char
。
但是問題出在空格上,因為它們也不是int
,為什么當我按Enter或空格時循環沒有結束?
根據C ++編程語言特別版 ,價格為$ 21.9,建議[5]:
請記住,默認情況下>>會跳過空格; 第21.3.2條。
而在$ 21.3.2中:
空格通過調用(§20.4.2)中定義的isspace()定義為標准C空格(空白,制表符,換行符,換頁符和回車符)。
@jrok的評論提供了答案。
因此,只要輸入是空白,cin就等待可能代表所請求類型的輸入。 如果流中包含無效字符,或者在消耗了有效的非空白字符后,該字符為空白,它將停止。
您可能會逐行閱讀以檢測空輸入:
std::string line
while(getline(cin, line)) {
// Note: Omitting the case where the line contains spaces, only.
if(line.empty()) {
// No input;
break;
}
else {
// Parse and process the line.
}
}
注意:如果禁用了跳過空格,則行為會更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.