C ++,检查用户是否在字符中输入了多个字母

时间:2018-11-24 22:28:34

标签: c++ char

我想获取一个char输入,如果它包含多个字母,则应该打印一条自定义消息。 例如,“ a”很好,“ abc”不好。 这是我的代码

{
    std::cout << "Enter information for your objects" << std::endl;
    const char circle = 'c', quadrilateral = 'q', rectangle = 'r', parallelogram = 'p'; char shapetype;
    char x = 'y';
    std::cout << "which shape would you like to work with?.. \nc=circle, q = quadrilateral, r = rectangle, p = parallelogram" << std::endl;
    std::cin >> shapetype;
    switch(shapetype) {
    case 'a':
        //do something
        break;
    case 'b':
        //idk
        break;
    default:
        //doesnt matter
        break;
    }
}

所以问题是,如果我输入例如“ abc”,则其读取字符时 它进入了'a'案。

谢谢!

2 个答案:

答案 0 :(得分:2)

char check;
std::cin >> check;

您只读一个字符,您无法真正猜测用户是否输入了多个字母。

std::string中获取整行,然后检查字符串是否确实符合您的期望,这可能是一个更好的主意。

以下是std::cin中的一个示例:

std::getline

当您输入#include <iostream> #include <string> int main() { std::string s; std::getline(std::cin, s); std::cout << s; } 并按Enter键时,它将打印出相同的文字。

如果您仍然想使用hello world来检查单个字符,则可以检查switch是否执行s.size() == 1,否则失败。

或者,您可以在字符串上执行一堆switch(s[0])-if,例如else

答案 1 :(得分:-1)

首先,您需要了解一个字符可以包含一个字符。用户键入整个句子都没关系,您的 char shapetype 只会收到他们键入的句子的第一个字符。

我认为您的主要问题是您使用的是 std :: cin ,它不验证也不关心某人输入的输入量。将要发生的所有事情是,他们键入的第一个字符将最终出现在您的 char shapetype 变量中。这意味着,对于您的代码,键入“一个小洞” 的人与键入“ a” 的人完全相同。

所以您真正应该问自己的问题是:

  • 您是否关心用户键入的字符是否超过一个字符?如果该问题的答案是肯定的,那么您需要另一种方法。

  • 如果您不在乎用户是否键入多个字符,则可以按照其他人的建议进行操作,然后使用类似以下内容将输入捕获为 std :: string getline(),检查 .empty() .size()大于1,然后输出适当的错误消息。除此之外,您知道自己只有一个字符。您可能需要进行大小写转换,以便您的开关也可以同时使用大写和小写输入。

现在,如果您只想接受单个字符,则可以使用 getchar()之类的仅捕获单个字符的东西。

#include <stdio.h>

int main(int argc, char** argv) {
    std::cout << "Enter information for your objects" << std::endl;
    const char circle = 'c', quadrilateral = 'q', rectangle = 'r', parallelogram = 'p';
    std::cout << "which shape would you like to work with?.. \nc=circle, q = quadrilateral, r = rectangle, p = parallelogram" << std::endl;

    int shapetype = getchar();

    switch(shapetype) {
        case 'a':
            //do something
            break;
        case 'b':
            //idk
            break;
        default:
            //doesnt matter
            break;
    }
}

您还需要注意getchar()实际上返回一个int而不是char。因此,如果需要,您可能需要铸造它。但是,以上方法可以解决您的问题。