我有一堆if语句。但我想在交换机中拥有那一堆if语句。我这样试试:
// project_stringManipulation.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iomanip>
#include <iostream>
#include <cctype>
using namespace std;
int main()
{
char input;
cin >> input;
switch (input)
{
case isalpha(input) :
cout << "That's an alphabetic character.\n";
default:
break;
}
cout << "Enter any character: ";
cin.get(input);
cout << "The character you entered is: " << input << endl;
cin.get();
if (isalpha(input))
cout << "That's an alphabetic character.\n";
cin.get();
if (isdigit(input))
cout << "That's a numeric digit.\n";
cin.get();
if (islower(input))
cout << "The letter you entered is lowercase.\n";
cin.get();
if (isupper(input))
cout << "The letter you entered is uppercase.\n";
cin.get();
if (isspace(input))
cout << "That's a whitespace character.\n";
cin.get();
return 0;
}
但接下来我会走上这条路:
case isalpha(input) :
以下错误:
Severity Code Description Project File Line Suppression State
Error (active) expression must have a constant value project_stringManipulation d:\Mijn Documents\VisualStudio2015\C++_Programs\Program_Nice\project_stringManipulation\project_stringManipulation.cpp 19
如何以正确的方式做到这一点?
谢谢
答案 0 :(得分:0)
当你写:
switch (input) {
case {something}:
break;
...
}
然后something
针对input
进行评估,如:(input == something)
。如果input
确实等于something
,则案例表达式为true
,您的代码将会执行。
问题是您正在评估input
到isalpha()
的结果,这是一个布尔值。
说input = "a"
。然后,isAlpha(input)
将返回true
。
现在你的情况说如果"a" == true
为假,则执行,因此你的代码不会执行。
如果你想把它结构化为一个开关,你可以写一些像:
switch (true) {
case isalpha(input):
//Do stuff
break;
...
}
正如Dark Falcon在评论中所提到的,case语句必须是C ++中的常量值。