2011-11-07 19 views
2

次のコードはエラーなしでコンパイルしますが、2 * 1(または1以外の数字)を実行しようとすると、ans関数の文字列 "Inte ok"がプログラムの画面に表示されません終了する。 なぜですか?if文で呼び出されたときに文字列が関数で書き出されません。

//Test för att se om jag förstår funktioner 

#include <iostream> 
#include <string> 

using namespace std; 

//Deklarerar variblar som jag ska använda 
int a,b,x; 
string s, ab; 

//Skriver ut funktionen för att multiplicera 
int multi(int a, int b) 
{ 
    x = a * b; 

    return x; 
} 

string ans() 
{ 
    using std::string; 

    string s = "Inte ok"; 

    ab = s; 

    return ab; 
} 

//Samlar in värde från användaren, skickar den till funtktionen "multi" som multiplicerar den, sedan skickar den tillbaks den till main via return. Main visar sedan 
//resultatet för användaren 

int main(void) 
{ 

    using std::cout; 
    using std::cin; 
    using std::string; 

    cout << "Ange ett nummber som du vill multiplicera: \n\n"; 
    cin >> a; 
    cout << "\n"; 
    cout << "Ange det andra nu: \n"; 
    cin >> b; 
    cout << "\n"; 


if(a == 1) 
{ 
    multi(a,b); 

    cout << "Svaret är: " << x << "\n"; 
} 
else if (a =! 1) 
{ 
    ans; 
    cout << "\n" << ab; 
} 

    return 0; 

} 

+0

なぜあなたはそれを返すよりも、グローバル変数(AB)に代入されますか?一般的には、どちらか一方を選ぶでしょう。 –

+2

副題として: '-Wall'でコンパイルすると、コンパイラは' else if(a =!1 ) '。メモリが私に役立つなら、gccは*割り当ての周りに括弧を入れてみましょう*(あなたが割り当てを意図していないので...)。 – bitmask

答えて

12

a =! 1はあなたの意見ではありません。 !1(これは0です)をaに割り当てているため、この条件は決して真ではありません。不等号演算子は!=ですが、追加条件なしでelseが必要です。また、機能ansを呼び出すために、あなたはans()を実行する必要があります。

if (a == 1) { 
    multi(a, b); 
    // ... 
} else { 
    ans(); 
    // ... 
} 
+0

それはそれを解決しました!ありがとうございます:-) –

+0

はい、コンパイラの警告をオンにする理由の良い例です。 sidenoteとして、OPは '" \ n "'の代わりに '' endl''を使うべきです。 – Kevin

+0

@Kevin:ストリームに書き込むたびにストリームをフラッシュしたくない場合はありません。 –

関連する問題