2015-01-05 58 views
0

我有以下程序意味着計算質數:如果我改變cout << primeVector[i] << ' ';cout << primeVector[i] << ' ';(我加一個空格)行爲什麼添加兩個空格會產生不正確的輸出?

#include "stdafx.h" 
#include <iostream> 
#include <vector> 

using namespace std; 

bool primeTest(int number){ 
    if ((number == 0) || (number == 1)){ 
     return false; 
    } 
    if ((number == 2) || (number == 3)){ 
     return true; 
    } 
    for (int j = 2; j <= number/2; j++){ 
     if (number%j == 0){ 
      return false; 
     } 
    } 
    return true; 
} 

int main(){ 
    vector<int> primeVector; 
    for (int i = 0; i <= 100; i++){ 
     if (primeTest(i)){ 
      primeVector.push_back(i); 
     } 
    } 
    int pvSize = primeVector.size(); 
    for (int i = 0; i < pvSize; i++){ 
     cout << primeVector[i] << ' '; 
    } 
    cin.get(); 
} 

它給了我

28224382245822478224118224138224178224198224238224298224318224378224418224438224 
478224538224598224618224678224718224738224798224838224898224978224 

,而不是

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 

爲什麼會發生這種情況?只有一個空間被添加。它不會出現雙引號。

+2

因爲''''用於字符文字,而不是字符串文字,並且雙字符文字具有實現定義的值。大多數編譯器會對此提出警告。 (您正在編譯時啓用了所有警告,是嗎?) – cdhowie

+0

當您將多個字符放在單引號內時,您會得到一個多字符字面值,其實現定義值爲int類型,而不是字符串。在這種情況下,它顯然具有值「8224」。用雙引號,你會得到一個字符串。 –

回答

4

字符串文字應該用雙引號引起來,而不是單引號。單引號用於字符文字。如果在單個字符文字中有多個字符,則該值是一些實現定義的整數。多字符文字很少有用。

(請注意,這並不適用於像'\n',這是一個轉義序列表示一個字符。)

使用" "代替。

0

簡而言之,一個空格是一個字符,兩個空格是兩個字符或一個C形字符串。
'' - 單個字符。
「」 - 兩個空格需要雙引號。

相關問題