使用c ++;
我需要从用户那里获得输入,然后检查条件(见下文),如果其中一个条件为假,请再次询问用户输入(循环),仅使用iostream
标题。
以下是条件:
我尝试了很多,但我失败了
#include <iostream>
using namespace std;
int main(){
char type;
cout<<"enter type: ";
cin>>type;
while(cin.fail()==1){
cout<<"error! invalid type. try again. \ntype:";
cin.clear();
cin.ignore();
cin>>type;
}
while(cin.fail()==0){
switch (type) {
case 'h':
case 'u':
case 'p':
break;
default:
cout<<"error!invalid type. try again.\ntype: ";
cin>>type;
}
}
cout<<"valid type";
return 0;
}
答案 0 :(得分:0)
假设你的&#34; type
s&#34;是个别的,空格分隔的字符,最简单的方法似乎是读取一个字符串,验证它只是一个字符长,并且该字符具有适当的值,例如:
std::string tmp;
while (std::cin >> tmp
&& (tmp.size() != 1
|| (tmp[0] != 'h' && tmp[0] != 'u' && tmp[0] != 'p'))) {
std::cout << "ERROR: invalid type try again\n";
}
if (!std::cin) {
std::cout << "ERROR: reached the end of the stream before reading a valid type\n";
}
else {
char type = tmp[0];
// now do something...
}
根据您的需要,您可能需要阅读整行(使用std::getline()
)而不是一个单词。
答案 1 :(得分:0)
要解决此问题,您可以使用字符数组。例如,对于最多100个字符的输入,您可以像这样定义类型变量:
char type[100];
如果使用转义序列,此数组将包含字符的ASCII代码,在最后一个字母后面,您的元素将为null
或'\0'
。如果输入的大小为1且第一个字符是字母,则输入将是一个字母。因此,声明这些简单的函数会使代码更清晰:
bool isOneCharacter(char* str)
{
//check if the first character exists and the second one not
return ((str[0]!='\0')&&(str[1]=='\0'));
}
bool isLetter(char ch)
{
//check if a character is between ['a'-'z'] or ['A'-'Z']
return (((ch>='a') && (ch<='z'))|| ((ch >= 'A') && (ch <= 'Z')));
}
bool isHUP(char ch)
{
return ((ch=='h')||(ch=='u')||(ch == 'p'));
}
了解这些事情你的主要功能很容易写出来:
int main() {
char type[100]; //input
bool isOk; //it will be true only if the input fits the conditions
do
{
isOk = false; //initial value
cout << "Type = ";
cin >> type;
//note that the first space will be treat as the end of your input
if (isOneCharacter(type)) //if type is a single character
{
//type contains a simple character at this point
char charType = type[0];
//if the input contains a single letter that is 'h', 'u' or 'p'
if (isLetter(charType) && (isHUP(charType)))
{
isOk = true;
}
}
if (!isOk)
{
//error message for the user
cout << "Try again!" << endl;
}
} while (!isOk);
}
在这种具体情况下,你并不一定要检查输入是否是字母,因为如果它的值是&#39; h&#39; &#39; U&#39;或者&#39; p&#39;自动意味着它的一封信。如果您的输入是一封信,但不是&#39; h&#39; &#39; U&#39;或者&#39; p&#39;上面的程序将询问用户输入新的输入而不检查它是否是一个字母。但如果您需要通过检查来解决这个问题,我已经为您编写了这个问题。