Таким образом, цель функции isalpha заключается в том, что она принимает только буквы (a-z), но это не похоже на мой код. Если я введу букву p, появится сообщение об ошибке. Если ввести слово типа «город», сообщение об ошибке все еще отображается. Что не так с моим кодом.Функция IsAlpha не принимает мой ввод
Так что из-за использования cin вместо cin.getline, второй фрагмент кода работает, но первый из них постоянно обходит сообщение об ошибке независимо от того, что. Может кто-нибудь объяснить?
Note1: Если вы думаете, что я должен использовать оператор 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;
}
Я не уверен, что 'письмо [SIZE]' делает то, что вы думаете. – chris
Хорошо, почему он работает для cin, но не cin.getline? Это все, что я хочу знать. – Deathslice
'cin >> letter [SIZE];' undefined behavior. 'cin.getline (буква, SIZE, '\ n');' is not. Условие, следующее за ними, - это неопределенное поведение, так что ни на самом деле не работает. – chris