2016-01-23 26 views
-2

我想要的是讓它讓用戶猜測數字的次數和猜測它的次數,然後告訴他所花費的次數他猜測它,這就是爲什麼im for for循環g!= r的條件,但是,我不知道C++是否允許這樣做。我的switch語句不會讓我使用一個特定的變量作爲表達式

而且,錯誤,我得到在編譯的時候這是

expression must have a constant value 

expression did not evaluate to a constant" and "case expression not constant 

Here's代碼:

int main() 
{ 
    int r = rand() % 101; 
    int g = 0; 
    int t = 10; 

    std::cout << "Guess a number, human (From 1 to 100)." << std::endl; 
    std::cin >> g; 

    for (int t = 0; g != r; t++) 
    { 
     switch (g) { 
     case (g == r): 
      std::cout << "You won, now get lost!" << std::endl; 
      break; 
     case (g < r): 
      std::cout << "Too low, piece of turd." << std::endl; 
      break; 
     case (g > r): 
      std::cout << "Too high, dubai." << std::endl; 
      break; 
     default : 
      std::cout << "How could you possibly have gotten it wrong, you stupid ape." << std::endl; 
     } 
    } 
    std::cout << "Finally!, it took you " << t << " freaking times!" << std::endl; 


    return 0; 
} 
+3

開關只讓你測試相等到一個特定的值,而不是一個範圍。你可以說switch(g){case(r):..}但不是g> r或g

+3

這段代碼應該寫成if(g == r)... else if(g r)... else ...;',儘管最後的else '子句將永遠不會被執行。 –

+3

你甚至不能說'case r',@Jeff。 case表達式需要是編譯時常量。 –

回答

0

如果你需要使用一個開關,你可以嘗試使用while循環使用標誌和開關之前的一些檢查:

bool flag = true; 
int t = 0; 
int x = 0; 
while(flag) 
{ 
     t++; 
     std::cout << "Guess a number, human (From 1 to 100)." << std::endl; 
     std::cin >> g; 

     if(g == r) 
     { 
      x = 1; 
      flag = false; 
     } 
     else if(g < r) 
      x = 2; 
     else 
      x = 3; 

     switch (x) { 
     case (1): 
      std::cout << "You won, now get lost!" << std::endl; 
      break; 
     case (2): 
      std::cout << "Too low, piece of turd." << std::endl; 
      break; 
     case (3): 
      std::cout << "Too high, dubai." << std::endl; 
      break; 
     default : 
      std::cout << "How could you possibly have gotten it wrong, you stupid ape." << std::endl; 
     } 
} 
+0

虐待它在一秒鐘! @vjb – Juan

+0

內置它,但由於某些原因它總是給出值3 @vjb – Juan

+0

<符號倒置!我改變了它,現在它完美的工作!謝謝您的幫助!! @vjb,我也得到了我的問題沒有正確發佈的概念,是這樣嗎? – Juan

3

的開關情況的檢查必須是常量表達式是針對比較平等原始值。

在你的情況下,你可以重寫開關使用如果命令。 使用下面的代碼,它會編譯。

if (g == r) 
{ 
    std::cout << "You won, now get lost!" << std::endl; 
} 
else if (g < r) 
{ 
    std::cout << "Too low, piece of turd." << std::endl; 
} 
else if (g > r) 
{ 
    std::cout << "Too high, dubai." << std::endl; 
} 
else 
{ 
    // will not get here, as previous if already cover all cases 
    std::cout << "How could you possibly have gotten it wrong, you stupid ape." << std::endl; 
} 

c + +切換 http://en.cppreference.com/w/cpp/language/switch

C++如果 http://en.cppreference.com/w/cpp/language/if

+1

除非你解釋OP_must_爲什麼要重寫開關,否則不能真正回答這個問題。 –

+0

OP沒有問這個問題。他說:「我想要的是讓它讓用戶猜測數字的次數和猜測它的次數......」 – Tony

+0

他也沒有問過。其實沒有問題。如果您要將陳述引用爲問題,請查看標題。 – EJP

0

我將其更改爲如果聲明,現在在第一次猜測之後,用戶無法再次猜測。

確定,新的代碼在這裏:

INT主要()

{

int r = rand() % 101; 

int g = 0; 

int t = 0; 

std::cout << "Guess a number, human (From 1 to 100)." << std::endl; 

std::cin >> g; 

for (int t = 0; g = r; t++) 
{ 
    if (g < r) 
    { 
     std::cout << "Too low." << std::endl; 
     std::cin >> g; 
    } 
    else if (g > r) 
     std::cout << "Too high." << std::endl; 
     std::cin >> g; 
} 
std::cout << "Finally!, it took you " << t << " freaking times!" << std::endl; 


return 0; 

}

+0

另外,是g = ra有效的條件嗎?順便說一下,它的確編譯了 – Juan

+0

@你可能想'g == r' –

+0

@vjb對!,或者更像是!=,因爲我想讓它運行爲只要不相等,對吧? – Juan

相關問題