我的功能:
//Check Character Case(Upper/Lower Case). If Upper Convert to Lower Case.
char checkLetterCase(char letter){
if(letter >= 65 && letter <= 90){
letter = tolower(letter);
return letter;
}
else if(letter >= 97 && letter <= 122){
return letter;
}
else{
return 0;
}
}
//Add the Specified Letter by Creating a New Node in the Letter List defined
void addLetter(letterListT *letListHead, char letter){
letterListT *newNode;
newNode = (letterListT *)malloc(sizeof(letterListT));
//Check Case(lowe/upper)
letter = checkLetterCase(letter);
//This may only occur on user input
while(letter == 0){
printf("Guess a letter: ");
scanf("%c", &letter);
letter = checkLetterCase(letter);
}
newNode->letter = letter;
newNode->nxt = letListHead->nxt;
letListHead->nxt = newNode;
}
我在 main 中的调用:
addLetter(unusedLetList, i=0);
这是我关于运行的双关语:
Guess a letter: 6
Guess a letter: Guess a letter: t
我的问题是:为什么当我输入非字符时,我会收到两次“猜一个字母”消息?
最佳答案
因为按<enter>
后,有一个额外的换行符尚未被 scanf()
消耗。 。调用getchar()
摆脱它:
letter = checkLetterCase(letter);
if (letter == 0) getchar();
顺便说一句,你的checkLetterCase()
功能在非 ASCII 系统上被破坏。改用这个:
#include <ctype.h>
char checkLetterCase(char letter)
{
return isalpha(letter) ? letter : 0;
}
关于c - 如果输入错误,则双重询问输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13906485/