2014-10-09 77 views
0

我實際上寫了一個函數將字符串轉換爲ascii值。 但是,我設法混淆了我的自我,不明白爲什麼我自己的代碼有效。字符串ascii函數

那就是:

void convertToString() 
{ 
    char redo; 
    int letter; 
    int length; 
    do { 
     cout<< "How long is your word \n"; 
     cin >> length; 

     cout << "Type in the letter values \n"; 

     for (int x = 0; x < length; x++) { 
      cin >> letter; 
      cout << char (letter); 
     } 

     cout << "\n To enter another word hit R" << endl; 
     cin >> redo; 

    } while (redo == 'R'); 
} 

在我可以輸入所有的ASCII值,我想了改變線的終端,但是我儘管這會導致一個問題,反正我的問題是,被擊中輸入按鈕與打空間相同?如果不是我不明白我的代碼是如何能夠打印出字符的,因爲我把它全部寫在一行中......每當有空間時,它是否爲整數「字母」賦值了一個新值?

請幫助/解釋

+1

'是否按下輸入按鈕與打空格相同?'在這個特定的程序中,是的。在處理非空白字符之前,'ostream :: operator >>(int&)'會首先跳過所有的空格(不管是空格,製表符還是行尾)。它會停止閱讀第一個非數字(再次,這可能是一個空間或行尾等)。 – 2014-10-09 02:55:29

+0

非常感謝!我想我現在明白了!所以它實際上在讀下一個正確的字符之前打印第一個字符? – 2014-10-09 03:47:47

+0

我不確定您的聲明中「it」的含義。 'operator >>'在打印之前或之後肯定不打印任何東西。 – 2014-10-09 04:47:54

回答

0

這是擴大在什麼伊戈爾在他的評論中說了一下,給一個小例子。

正如伊戈爾所說,istream::operator>>(&int)將讀取非空白。這意味着對於操作員的每次調用,它將沿輸入流(輸入的內容)掃描非空白字符,並再次讀取下一個空白字符。接下來的電話將會從你離開的地方開始。所以,輸入一個空格或換行符對於你正在使用int的情況是完全一樣的。

你可以用一個簡單的代碼位,掃描,直到EOF驗證這一點:

#include <iostream> 
int main() 
{ 
    int number; 
    while (std::cin >> number) 
    { 
     std::cout << number << std::endl; 
    } 

    return 0; 
} 

這將等待用戶輸入是完整的(按enter),但打印新線中的每個整數你輸入由空白分隔。因此,「1 2 3 4」將在單獨的行上打印每個數字,而不管用空格,製表符還是換行符分隔它們。