簡體   English   中英

使用cin在while循環中進行條件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM