C語言throw-expression問題~~~~

#include <iostream>

#include <math.h>

using namespace std;

void CountAns(int,int);

int main()

{

srand(time(NULL));

int Num1=rand()%9+1,Num2=rand()%9+1;

CountAns(Num1,Num2);

system("PAUSE");

return 0;

}

void CountAns(int Num1,int Num2)

{

int Total=Num1*Num2,sum;

cout << Num1 << "*" << Num2 << " = ";

cin >> sum;

Total=sum ? cout << "Very Good" : CountAns(Num1,Num2);//此句錯誤

}

請問此句為什會錯誤? 我用if (total==sum) 這個卻可以~換成這個怎會不行

請大大們教教小弟

已更新項目:

if(Total == sum)

cout << "very good";

else

CountAns(Num1,Num2)

可行! 但是以這樣呈現卻不行

~~

;

3 個解答

評分
  • 其威
    Lv 7
    9 年前
    最佳解答

    首先,針對你的標題,C 不會 throw exception,C++ 才會。

    而且你的程式中有 #include <iostream> 與 cin / cout,是 C++ 沒錯。

    再來則是你的問題...

    Total=sum ? cout << "Very Good" : CountAns(Num1, Num2); // 這句

    這句很有問題。

    首先,條件運算子(?:)這東西的優先權比指派運算子(=)高,所以這句會先做

    sum ? cout << "Very Good" : CountAns(Num1, Num2);

    的部份。

    然後,他會在 sum 的值可以 evaluate 成 true 的時候(也就是 sum 的值 != 0 的時候)回傳

    cout << "Very Good"

    在 sum 的值 evaluate 成 false(也就是 sum 的值剛好 == 0 的時候)回傳

    CountAns(Num1, Num2)

    那麼,cout << "Very Good!" 會回傳什麼呢?他會呼叫 cout 的 operator <<(const char *),預設是會回傳 ostream 物件本身。

    所以這段最後的回傳值是 cout,其型態是 std::ostream &。

    再來 CountAns(Num1, Num2) 這段,會呼叫 CountAns(),然後回傳他的回傳值。

    可是 CountAns() 的回傳值型態是 void,沒有回傳值。

    可是 ?: 在遇到其中一個 operand 型態是 void 的時候,會要求兩個 operand 都是 void 或 throw exception,所以你的編譯會失敗。

    你這段程式碼只能無法用 ?: 來寫,只能寫成你補充的那種形式。

    2011-08-06 00:29:14 補充:

    為什麼最後一句多了一個只能...?

    應為「你這段程式碼無法用 ?: 來寫,只能寫成你補充的那種形式。」

  • 9 年前

    你該復習三元運算子怎麼用,

    我以為這動作不適合。

  • novus
    Lv 6
    9 年前

    void CountAns

    void ???

還有問題?馬上發問,尋求解答。