1
#include <iostream>

typedef int temperature;
temperature celsiustemperature[4];

int main()
{
    using namespace std;
    cout << "Enter a start temperature in celsius: ";
    cin >> celsiustemperature[0];
    cout << "Enter an end temperature in celsius: ";
    cin >> celsiustemperature[1];
    cout << "You printed " << celsiustemperature[0] << " and " << celsiustemperature[1] << "." << " Is this correct?" << endl;
    char szYesOrNo;
    cin >> szYesOrNo;
    switch (szYesOrNo)
    {
        case "yes":
               cout << "win";
               break;
        case "no":
              cout << "winner";
              break;
     }
     return 0;
}

次のコードの何が問題なのか理解できません。コメントを追加しなくてすみません。winユーザーが入力した場合とユーザーが入力yeswinnerた場合に印刷したいno

4

6 に答える 6

4

はであり、ステートメント内の文字列リテラルと比較しているため、これはコンパイルされませんszYesOrNo。文字列リテラルはタイプであり、直接比較することはできません。charswitchconst char[]char

std::stringの代わりに使用char

std::string szYesOrNo;

これにより、値を操作できないswitchため、を削除する必要があります(また、ケースがないため、誤った入力を処理しないことに注意してください)。このようにしてください:switchstringswitchdefault

if (szYesOrNo == "yes")
{
    cout << "win";
}
else if (szYesOrNo == "no")
{
     cout << "winner";
}
else
{
    // Handle wrong input...
}
于 2013-03-12T00:03:41.503 に答える
0
char szYesOrNo;

これは単一の文字です。

switch (szYesOrNo)
{
    case "yes":

これにより、単一の文字の値が文字列のアドレスと比較されますが"yes"、これは必要なものではありません。

文字列に入力するか、文字を比較します。

文字を比較するには:

switch (szYesOrNo)
{
    case 'y':

文字列を比較するために、switchステートメントを使用することはできません。ネストされたものを使用できますif/else

string szYesOrNo;

if(szYesOrNo == "yes") {
    cout << "win";
} else if(szYesOrNo == "no") {
    cout << "winner";
}

aをa==と比較するときに使用できます(これが何であるか)。アドレスだけでなく、内容が比較されていることを確認してください。stringchar[]"yes"string

于 2013-03-12T00:02:59.493 に答える
0

文字列をオンにすることはできません。整数型(ints、enums、chars、longs)のみ。

于 2013-03-12T00:03:58.537 に答える
0

コードの主な問題はchar szYesOrNo;、文字などの1つの記号しか保持できない変数を宣言し、その文字が単語全体を入力することを期待することです。代わりに、を使用stringしてこれを行う必要があります。それを修正するときは、決定を下すためにifステートメントの代わりにステートメントを使用する必要があります。switch

于 2013-03-12T00:04:14.187 に答える
0

まず第一に、szYesOrNoは単一charであるため、1つの文字のみを含めることができます。あなたがするとき、あなたはまたはcin >> szYesOrNo;を読んでいるだけです。yn

次に、ステートメントを使用して、このシングルを文字列リテラルおよび。switchと比較しようとしています。この比較は意味がありません。文字列リテラルのタイプは「配列N 」です。char"yes""no"const char

代わりに、std::string次のように使用します。

string szYesOrNo;
cin >> szYesOrNo;
if (szYesOrNo == "yes") {
  cout << "win";
} else if (szYesOrNo == "no") {
  cout << "winner";
}
于 2013-03-12T00:04:27.170 に答える
0

szYesOrNoは文字であるため、文字列(3文字)である「yes」の場合は切り替えることができません。

于 2013-03-12T00:04:42.403 に答える