Switch 语句(字符串)一直选择默认值,除非其为零
Switch statement (string) keeps selecting default value unless its zero
Switch 语句仅在我将 cout 中的括号之间的值更改为 0 时才有效<<getDayOfWeek(0(;。 1-6 之间的任何数字都会选择默认值"无效的日期数字"。 没有任何问题(未发现问题(。 我尝试从头开始重新输入它,但没有任何效果。 代码应该打印出我输入其编号的日期,但它仅适用于 0。如果我输入其他数字,它会选择默认值。
#include <iostream>
#include <cmath>
#include <string>
#include <cstring>
using namespace std;
string getDayOfWeek(int dayNum) {
string dayName;
switch (dayNum) {
case 0:
dayName = "Sunday";
break;
switch (dayNum)
case 1:
dayName = "Monday";
break;
switch (dayNum)
case 2:
dayName = "Tuesday";
break;
switch (dayNum)
case 3:
dayName = "Wednesday";
break;
switch (dayNum)
case 4:
dayName = "Thursday";
break;
switch (dayNum)
case 5:
dayName = "Friday";
break;
switch (dayNum)
case 6:
dayName = "Saturday";
break;
default:
dayName = "Invalid Day Number";
}
return dayName;
}
int main()
{
cout << getDayOfWeek(5);
return 0;
}
您错误地使用了switch
语句。代码应如下所示:
switch(dayNum){
case 0:
// do something
break;
case 1:
// do something
break;
case 2:
// do something
break;
case 3:
// do something
break;
case 4:
// do something
break;
case 5:
// do something
break;
case 6:
// do something
break;
default:
// do something
break;
}
你不应该一遍又一遍地重复switch
语句;只要保留第一个。
switch
语句中不需要switch (dayNum)
。 它们将创建嵌套的switch
语句,并在第一个switch
语句中仅保留case 0
和default
。
试试这个:
#include <iostream>
#include <cmath>
#include <string>
#include <cstring>
using namespace std;
string getDayOfWeek(int dayNum) {
string dayName;
switch (dayNum) {
case 0:
dayName = "Sunday";
break;
case 1:
dayName = "Monday";
break;
case 2:
dayName = "Tuesday";
break;
case 3:
dayName = "Wednesday";
break;
case 4:
dayName = "Thursday";
break;
case 5:
dayName = "Friday";
break;
case 6:
dayName = "Saturday";
break;
default:
dayName = "Invalid Day Number";
}
return dayName;
}
int main()
{
cout << getDayOfWeek(5);
return 0;
}
您可以通过使用数组来避免switch
语句:
static const char day_names[] =
{
"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"
};
const std::string day_of_week = day_names[dayNum];
switch
语句向项目添加更多代码行,这会增加复杂性和缺陷的可能性。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 具有默认值的引用获取函数
- 当给定默认值时,为什么此模板参数推导失败
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 格式化浮点值:返回默认值
- 如何将数组部分初始化为某个默认值?
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- 创建一个包含 c++ 默认值的环境文件
- C++(和 ROS) - 包含与前向声明引用,设置默认值和类型定义
- Makefile g++ 使用命令行中的 -D 变量进行编译,默认值
- Switch 语句(字符串)一直选择默认值,除非其为零
- 如何使用默认值将枚举声明为 extern
- 如何在提升程序选项中设置矢量<矢量>的默认值<string>
- 如何使用默认值为构造函数中的枚举赋值?
- 变量始终在函数中重置为默认值
- 如何在C++中提供模板化函数作为另一个函数的参数,默认值?
- 函数不返回默认值
- 具有公共范围与专用范围的默认值的C++的不同行为
- 在 c++ 中,如果我创建一个接受一个具有默认值的参数的构造函数 - 它会用作默认(空)构造函数吗?
- 执行默认值:在C 中的开关案例选择语句中