切换案例,用户输入,确定它是什么字符

时间:2017-02-18 15:19:28

标签: c++

我有一堆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  

如何以正确的方式做到这一点?

谢谢

1 个答案:

答案 0 :(得分:0)

当你写:

switch (input) {
    case {something}:
    break;
    ...
}

然后something针对input进行评估,如:(input == something)。如果input确实等于something,则案例表达式为true,您的代码将会执行。

问题是您正在评估inputisalpha()的结果,这是一个布尔值。

input = "a"。然后,isAlpha(input)将返回true

现在你的情况说如果"a" == true为假,则执行,因此你的代码不会执行。

如果你想把它结构化为一个开关,你可以写一些像:

switch (true) {
    case isalpha(input):
    //Do stuff
    break;
    ...
}

此外,

正如Dark Falcon在评论中所提到的,case语句必须是C ++中的常量值。