C ++从键盘上一次读取一个字符,直到用户输入一个字母(' A' ...' Z'或' a' ..&# 39; Z')

时间:2014-04-01 19:16:42

标签: c++ eclipse

回答这个问题:

从键盘上一次读取一个字符,直到用户输入一个字母(' 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);

       };

如果它是一个数字,它正在工作。 如果它是一个符号或一封信,它会说信吗?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ?信件 ? (...)

你能帮我吗?

3 个答案:

答案 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;
    }