0

私のコードの基本的な考え方は、ユーザーが0〜9のスペル、つまりゼロ、1など、または実際の数字を入力し、それぞれ数字/スペルを出力することです。

(number は文字列変数) を使用して while ループでこれを実行し、while(cin >> number)if ステートメントを使用して適切な出力オプション、つまり「ゼロ」-> 0、および「0」--> ゼロを選択しました。

最初は次のようにしようとしましたが。

while (cin >> number || cin >> n) 
{
    if (n == 0)
        cout << digits[0] << endl;
           .
           . 
           .
    else if (n == 9)
        cout << digits[9] << endl;  

    if (number == digits[0])
        cout << 0 << endl;
           .
           .
           .
    else if (number == digits[9])
        cout << 9 << endl;  
}

digits文字列「ゼロ」、「ワン」などを格納する単なるベクトルクラスです。

ただし、これは機能しませんでした。文字列が入力されたときの出力は正しいのですが、整数が入力されたときの出力は常に「ゼロ」でした。なぜこれが機能しないのだろうと思っていました。while ループ条件と関係があると考えました。コンピュータは、文字列/整数が入力されたかどうかを識別して、適切なアクションを実行できませんか?

4

2 に答える 2

3

問題は、cin >> number常に成功することnumberですstring(EOF またはその他の障害条件に達しない限り)。ユーザーが数字を入力numberすると、数値が文字列として保持されます。だからcin >> n起こらない。

number代わりに、文字列"0"..に対してyour を比較する必要があります"9"(数字の名前をテストすることに加えて)。また、チェーンの代わりにループを使用する必要がありますif/else if

于 2012-10-06T22:46:07.970 に答える
0

||演算子の使用法を理解していないと思います。while (cin >> number || cin >> n)は docin >> numberを意味し、その式が を評価する場合falseは docin >> nを、どちらかが を評価する場合trueは括弧内を実行します。

nneonneo が言ったように、cin >> numberwill (ほとんど) always evaluatetrueであるため、cin >> n決して起こらないでしょうが、それは実際にはあなたの問題の中で最も少ないものです.

私が提案するなら、while今のところループを完全に取り除き、1 回だけ実行することに集中する必要があると思います。あなたが必要とするのは、天気のテストcin >> number行うことです。次に、一方を他方に変換する方法を決定できます。number"0""1""9""zero""one""nine"

于 2012-10-06T23:39:45.960 に答える