【发布时间】:2018-08-02 10:33:54
【问题描述】:
我正在尝试编写一个简单的程序,提示用户输入一个数字,然后它会回复用户输入的数字键。除 0~9 以外的输入应该转到默认情况下“不允许。”消息将作为输出打印。以下代码:
#include <iostream>
#include<cstdio>
using namespace std;
int main()
{
int x;
cout << "Please enter number from 0~9: ";
cin >>x;
switch (x)
{
case 0: cout<< "0 is pressed.";break;
case 1: cout<< "1 is pressed.";break;
case 2: cout<< "2 is pressed.";break;
case 3: cout<< "3 is pressed.";break;
case 4: cout<< "4 is pressed.";break;
case 5: cout<< "5 is pressed.";break;
case 6: cout<< "6 is pressed.";break;
case 7: cout<< "7 is pressed.";break;
case 8: cout<< "8 is pressed.";break;
case 9: cout<< "9 is pressed.";break;
default : cout << "Not allowed.";
}
return 0;
}
因此,当我尝试输入非整数,例如“a”或“abc”时,它将在 case 0 中运行语句,而不是 case default。谁能解释为什么?不是当一个整数变量试图存储一个字符时,它会把它的 ascii 作为它的值吗?希望有人愿意解释这背后的逻辑。谢谢!
(我目前正在使用getchar()并将变量x声明为char数据类型,以及case '0'等来暂时解决这个问题。但我自己很感兴趣学习这方面的知识。对不起如果这样的帖子是重复的,我尝试搜索并没有找到。希望我的搜索技术不要那么糟糕。)
【问题讨论】:
-
不,当“一个整数变量试图存储一个字符”时,它不会“把它的 ascii 作为它的值”。
<<不是这样工作的。但是你仍然需要default:,以防有人输入“42”作为输入,例如。您只需要添加一些代码来检查无效输入。
标签: c++ char int switch-statement