我想获取一个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'案。
谢谢!
答案 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。因此,如果需要,您可能需要铸造它。但是,以上方法可以解决您的问题。