假设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在我的程序的任何其他部分都没有打扰我,除了这个。
如何摆脱它?
答案 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