c - 如果输入错误,则双重询问输入

标签 c list case-sensitive

我的功能:

//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/

相关文章:

python - 根据其他列表的值将列表映射到字典

c - 为什么线程2要等待线程1结束?

c - 如何在 CLion 中自动生成和更新 .h 文件的函数声明(原型(prototype))?

python - 如何在不使用循环的情况下反转 Python 中列表的顺序?

python - 计算两个列表中的对,当相乘时形成一个完美的平方

git - 在 Windows 上将所有 Git 分支名称重命名为小写(GitHub 远程)

c - syslog.conf 配置仅登录到自定义日志文件,

c - 在函数中传递结构

ios - IIS 是否重定向以匹配 url 大小写?

mysql - Rails 中区分大小写的查找