IsAlpha功能不接受我的输入

时间:2014-11-18 22:06:03

标签: c++ string

所以isalpha函数的目的是它只接受字母(a-z),但对我的代码来说似乎并非如此。如果我输入字母p,则会显示错误消息。如果输入像" city"这样的单词,则仍会显示错误消息。我的代码有什么问题。

因此,由于使用了cin而不是cin.getline,第二段代码可以工作,但第一段代码不管是什么都会不断地循环错误消息。有人可以解释一下吗?

注意1:如果您认为我应该使用cin运算符而不是cin.getline,那么就会产生新的问题。你看,这个程序是另一个程序的一部分,在那个程序中,我的所有输入流(>>)都是cin.getline。所以,如果我同时使用cin然后使用cin.getline,它将会产生冲突。我试过使用cin.ignore但无济于事。无论如何,我仍然不知道为什么会这样。

#include <iostream>
#include <string>
#include <cctype>

using namespace std;

int main()
{
const int SIZE = 10;
char letter[SIZE];

cout << "Enter a word. ";
cin.getline(letter, SIZE, '\n');

while(!isalpha(letter[SIZE]))
{
    cerr << "Error, only letters are allowed. ";
    cin.getline(letter, SIZE, '\n');
}

cout << "This is acceptable. ";

return 0;
}


#include <iostream>
#include <string>
#include <cctype>

using namespace std;

int main()
{
const int SIZE = 10;
char letter[SIZE];

cout << "Enter a word. ";
cin >> letter[SIZE];

while(!isalpha(letter[SIZE]))
{
    cerr << "Error, only letters are allowed. ";
    cin >> letter[SIZE];
}

cout << "This is acceptable. ";

return 0;
}

1 个答案:

答案 0 :(得分:0)

那是因为字母[SIZE]被认为是指向数组第一个元素的指针。所以你的while(!isalpha(字母[SIZE]))只检查第一个字符是否是字母数字。

这是一个更好理解的例子;

尝试在屏幕上打印字母[SIZE]。

int main()
{
const int SIZE = 10;
char letter[SIZE];

cout << "Enter a word. ";
cin >> letter[SIZE];

cout << letter[SIZE] // this will only output the first character that the user entered.

cout << "This is acceptable. ";

return 0;
}

所以如果你想检查他们输入的整个单词,你需要逐个元素循环。