在C中循环打印char的输入

时间:2014-09-18 23:43:28

标签: c

假设char c是来自用户的单个字符的输入。

if (c != 'A' && c != 'B' &&  c != 'C' && c != 'D') {
    int t = 1;
    while (t = 1) {
    printf("%c is an invalid input. Valid cases are A-D.\n", c);
    scanf( "%c", &input); /* Space for taking care of whitespace */
    c = lowToUp(c); /* If c is lowercase, convert to uppercase */
    if (c == 'A' || c == 'B' || c == 'C' || c == 'D') {
      break;
    }
  }
}

我正在尝试显示此错误消息并继续循环,直到用户输入有效的char值。

循环本身很好,但输出不是。如果我输入X,

X is an invalid input. Valid cases are A-D.

 is an invalid input. Valid cases are A-D.

c的实际值之后的隐形\ n在我的程序的任何其他部分都没有打扰我,除了这个。

如何摆脱它?

2 个答案:

答案 0 :(得分:2)

在每个scanf之后,您需要刷新输入缓冲区。 E.g:

int c;
....
scanf (....)
do { c = getchar (); } while (c != '\n' && c != EOF);     /* flush input buffer */

答案 1 :(得分:0)

正如您在/* Space for taking care of whitespace */中所说,格式字符串中的空格将消耗任意数量的空格。但是,你没有放任何东西。

scanf(" %c",&input);
     //^ notice the space is inside the string, not before it like you did