首页 > 解决方案 > Scanf 在使用“%c%c”时不读取换行符

问题描述

我是 C 语言的初学者,最近解决了一个要求使用 %c%c 验证用户输入的 y 或 n 的问题,我想知道如果我输入 w 或 e 之类的字符,为什么这个程序会给出错误的输出,那么它似乎没有读取换行符。

void clearKeyboard(void)
{
    while (getchar() != '\n')   ; 

}
int yes(void){
    char char1;
    char char2;
    int result=-1;
    
    do{
        scanf("%c%c",&char1,&char2);
        if (char2!='\n'){
            clearKeyboard();
            printf("*** INVALID input *** <Please enter again>: ");

        }
        else{
            if(char1=='y'||char1=='Y'){
                result=1;
            }
            else if(char1=='n'||char1=='N'){
                result=0;
            }
            else{
                clearKeyboard();
                printf("*** INVALID input *** <Please enter again>: ");

            }
        }

    }while(char2!='\n');
    return result;
    
}

标签: c

解决方案


scanf确实阅读了换行符。您的代码简单错误且过于复杂。

您也不能“清除键盘”,至少不能使用标准 C 函数。

你可能想要这个:

#include <stdio.h>

int yes(void) {
  char char1;
  int result = -1;

  do {
    scanf("%c", &char1);
    if (char1 == '\n') {
      continue;  // if it a newline, ignore it and continue
    }

    if (char1 == 'y' || char1 == 'Y') {
      result = 1;   // it's a yes
    }
    else if (char1 == 'n' || char1 == 'N') {
      result = 0;   // it's a no
    }
    else
    {
      // anything else than yes or no
      printf("*** INVALID input *** <Please enter again>: ");
    }
  } while (result != 0 && result != 1);  // repeat until yes or no

  return result;
}

int main()
{
  while (1)
  {
    printf("yes = %d\n", yes());
  }
}

推荐阅读