以下涉及输入和字符串的C++代码有什么问题?
What's wrong with the following C++ code involving input and string?
#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
。
这不会编译,因为szYesOrNo
是char
,并且您正在将其与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;
时,您只读取y
或n
。
其次,您尝试使用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";
}
在比较string
和char[]
(即"yes"
(时,可以使用==
。string
确保比较内容而不仅仅是地址。
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 为什么在这个代码结束循环中没有得到结束
- 在c代码之间共享数据的最佳方式
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值