以下涉及输入和字符串的C++代码有什么问题?

What's wrong with the following C++ code involving input and string?

本文关键字:代码 C++ 什么 问题 字符串 输入      更新时间:2023-10-16
#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;
}

我搞不清下面的代码出了什么问题。很抱歉没有添加评论;如果用户输入yes,我希望它打印win;如果用户输入了no,我希望打印winner

这不会编译,因为szYesOrNochar,并且您正在将其与switch语句中的字符串文字进行比较。字符串文字的类型为const char[],不能直接与char进行比较。

使用std::string而不是char:

std::string szYesOrNo;

这也将迫使您删除switch,因为switch无法对string值进行操作(请注意,您的switch没有default大小写,因此它不会处理不正确的输入(。就这样做吧:

if (szYesOrNo == "yes")
{
    cout << "win";
}
else if (szYesOrNo == "no")
{
     cout << "winner";
}
else
{
    // Handle wrong input...
}

不能打开字符串。仅适用于类似整数的类型(int、enums、chars、longs(。

代码的主要问题是,您将一个变量声明为char szYesOrNo;,该变量只能包含一个符号,例如一个字母,但希望该字符输入一个完整的单词。您应该使用string来执行此操作。解决此问题后,您将需要使用if语句而不是switch语句来进行决策。

首先,szYesOrNo是单个char,因此只能包含一个字符。当您执行cin >> szYesOrNo;时,您只读取yn

其次,您尝试使用switch语句来比较单个char与字符串文字"yes""no"。这种比较没有意义。字符串文字的类型为"array of N const char"。

相反,使用std::string,如下所示:

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

szYesOrNo是一个字符,所以在"yes"是字符串(3个字符(的情况下不能切换它。

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";
}

在比较stringchar[](即"yes"(时,可以使用==string确保比较内容而不仅仅是地址。