回答这个问题:
从键盘上一次读取一个字符,直到用户输入一个字母(' A' ...' Z'或' a' .. ' Z'。)
实施例: 信件 ? 4 //无效的人物;所以,再问一封信 信件 ? 。 //重复...... 信件 ? // // 信件 ? # 信件 ? k //最后,用户键入了一个字母!!!
我写了以下代码:
#include <iostream>
#include <stdio.h>
#include <ctime>
#include <string.h>
#include <cstring>
#include <ctype.h>
using namespace std;
int main(int letter){
cout << "LETTER ? ";
cin >> letter;
if (!isalpha(letter))
{main(letter);}
else
{};
return(0);
};
如果它是一个数字,它正在工作。 如果它是一个符号或一封信,它会说信吗?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ? (...)
你能帮我吗?
答案 0 :(得分:2)
您的代码有未定义的行为。 C ++标准不允许递归调用函数main。
此主要宣言
int main(int letter){
不符合C ++标准。如果编译器的文档描述它,它可能是一个实现定义的main声明。
对于重复消息,当您输入非数字(变量字母具有类型int)时,流std::cin
得到了错误的内部状态,如果您不通过调用清除此状态
std::cin.clear();
std :; cin不允许输入其他内容。
如果没有要求该函数是递归的,那么你可以简单地写
#include <iostream>
#include <cctype>
int main()
{
char letter;
do
{
std::cout << "LETTER ? ";
std::cin >> letter;
} while ( std::cin && std::isalpha( letter ) );
}
答案 1 :(得分:0)
您当前的输入参数是int。 改为使用char或string。
int main(char letter)
{
cout << "LETTER ? ";
cin >> letter;
cin.clear(); //Good to have this (see comments below)
cin.ignore(200, '\n'); //This 2 lines will allow you to continue inputting when unexpected input is given
......
}
答案 2 :(得分:0)
如果您的唯一任务是从键盘读取,直到输入a,z,A,Z而不打印字母,这应该有效:
#include <iostream>
using namespace std;
int main()
{
char letter = 'b';
while (letter != 'a' && letter != 'A' && letter != 'Z' && letter != 'z')
cin >> letter;
return 0;
}