所以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;
}
答案 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;
}
所以如果你想检查他们输入的整个单词,你需要逐个元素循环。