2017-04-13 76 views
0

我是新手,正在學習C++。我目前正在學習cctype中的字符函數(ctype)。我無法理解爲什麼isspace(a_character)沒有返回我的cout消息 - 問題是它不會接受我的Char用戶輸入。任何幫助或轉向正確的方向將不勝感激。如果我指定「'的Char值,我可以實現我想要的響應,但是,它會破壞目的。我複製了一部分代碼。據我的理解,Whitespace沒有確切的符號?如果是這樣,是否可以輸入一個空格作爲輸入?我試過輸入:''然而,還沒有成功。再次,我將不勝感激。Isspace字符功能

#include <iostream> 
#include <cctype> 
#include <ctype.h> 

using namespace std; 

int main() 
{ 
    char c ; 
    char ans = 'y' || 'Y'; 

    do { 
     cout << "Enter a character \n"; 
     cin >> c; 

     if (isspace (c)) //Having trouble get this to actually produce a value 
     { 
     cout << "Your character " << c << "is a whitespace"; 
     } 

     if (ispunct(c)) 
     { 
     cout << c << " is a punctuation character\n"; 
     } 

     cout << "Would you like to enter another value? \n"; 
     cin >> ans; 

    } while (ans == 'Y' || ans == 'y'); 

    return 0; 
} 
+0

'char ans ='y'|| 'Y';'咦? – John3136

+0

對於我的while循環來提示用戶他們是否想重複該程序 – Rod

+0

''y'|| 'Y''簡單地說就是'真'。 –

回答

5

>>是格式化的提取器。格式化的提取器在默認情況下會在實際讀取任何內容之前提取並放棄所有空白字符。這是有用的行爲,但不是當您試圖讀取空白字符時。

使用無格式輸入(get())或noskipws操縱器。請注意,後面的讀取ans很可能取決於跳過空格以正常工作,所以如果您選擇第二個選項,那麼在讀取c之後,您可能希望在skipws之後恢復空白跳過行爲。

+0

像你這樣的人在晚上幫我睡覺。但是,我會進一步探討:我決定刪除do while循環,因爲它會給我帶來麻煩(就像你預測的那樣),即使使用:cin.get(c)>> skipws;機械手。我很好奇,爲什麼,即使我把它包含在cin成員函數 – Rod

+1

@Rod 1)如果你使用'get()'(它是未格式化的並且不會自動跳過空格),那麼你不需要到'skipws'。 2)我懷疑問題是在第二次迭代中輸入緩衝區中留下的換行符被讀取。一種可能是在重新打印提示之前使用'ws'或'ignore'丟棄它。 –