2016-01-07 979 views
-1

我無法弄清楚我的代碼中的不合格id是什麼,或者如何補救它。錯誤:預期在'if'和'else'之前的非限定id C++

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    string x; 
    getline(cin, x); 
} 

if (x == 1) { 
    cout << "x is 1"; 
} 

else if (x == 2) { 
    cout << "x is 2"; 
} 

else { 
    cout << "value of x unknown"; 
} 

上面的舊代碼。新代碼如下

#include <iostream> 
#include <string> 
#include <sstream> 
using namespace std; 

int main() 

{ 
    string mystr; 
    int number; 
    cout << "pick a number "; 
    getline (cin, mystr); 
    stringstream(mystr) >> number; 

if (number == 1) 
    cout << "x is 1"; 

else if (number == 2) 
    cout << "x is 2"; 

else 
    cout << "its not one or 2"; 
} 

這是否需要改進?感謝所有幫助和幫助。

+2

getline(cin,x)中的'}';}' –

+1

您不能將指令放在任何函數之外。只有聲明/定義可以去那裏。 – immibis

+0

投票結果爲印刷錯誤。 @ jamms69:如果你的聲望得分允許(所以有時候可以挑剔),請刪除問題。這將節省一些努力。不好了!有人*回答了它。好。 –

回答

0

的問題是在這裏:

int main() 
{ 
    string x; 
    getline(cin, x); 
} // <-- ERRONEOUS! 

if (x == 1) { 
... 

您終止main()過早,導致你的代碼的其餘部分是在任何函數之外,因此編譯器錯誤。您需要將錯誤的}改爲main()的末尾。

之後你做出的改變,你是因爲你不能使用==操作比較一個stringint得到operator==()錯誤。您需要將int值更改爲字符串,然後對其進行比較。

試試這個:

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    string x; 
    getline(cin, x); 

    if (x == "1") { 
     cout << "x is 1"; 
    } 

    else if (x == "2") { 
     cout << "x is 2"; 
    } 

    else { 
     cout << "value of x unknown"; 
    } 

    return 0; // <-- don't forget this 

} // <-- brace moved here 

如果你真的要比較的數值,你需要的x值轉換爲int可變第一(不要忘記錯誤檢查):

#include <iostream> 
#include <string> 
#include <sstring> 

using namespace std; 

int main() 
{ 
    string x; 

    if (!getline(cin, x)) { 
     cout << "unable to read x"; 
    } 
    else { 
     istringstream iss(x); 
     int value; 

     if (!(iss >> value)) { 
      cout << "x is not a number"; 
     } 

     else if (value == 1) { 
      cout << "x is 1"; 
     } 

     else if (value == "2") { 
      cout << "x is 2"; 
     } 

     else { 
      cout << "value of x unknown"; 
     } 
    } 

    return 0; 
} 
相關問題