C++ IsAlpha函数不接受我的输入

C++ IsAlpha函数不接受我的输入,c++,string,C++,String,所以isalpha函数的目的是它只接受字母(a-z),但我的代码似乎不是这样。如果输入字母p,将显示错误消息。如果输入类似“city”的单词,则仍会显示错误消息。我的代码有什么问题 因此,由于使用了cin而不是cin.getline,第二段代码可以工作,但第一段代码始终循环错误消息,不管发生什么。有人能解释一下吗 注1:如果您认为我应该使用cin操作符而不是cin.getline,那么这就产生了一个新问题。你看,这个程序是另一个程序的一部分,在那个程序中,我所有的输入流(>>)都是cin.get

所以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;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
常数int SIZE=10;
字符字母[大小];

cout这是因为字母[SIZE]被视为指向数组第一个元素的指针。因此,while(!isalpha(字母[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;
}
intmain()
{
常数int SIZE=10;
字符字母[大小];
字母[大小];

我不能肯定
letter[SIZE]
做的和你想的一样。那么为什么它对cin有效,而对cin.getline无效?这就是我想知道的。
cin>>letter[SIZE];
是未定义的行为。
cin.getline(letter,SIZE,“\n”)
不是。两者后面的条件都是未定义的行为,因此实际上都不起作用。您尝试过使用调试器吗?您认为两者都不起作用是什么意思。第二部分实际上完成了它的任务。如果我在第二个程序中输入party这个词,我得到的结果是“这是可以接受的”。在第一段代码中,错误消息不断重复。因此,您可以看到,第二段代码确实有效。