大家好,我刚刚完成了我的程序,它读取任何单个字符并打印该字符的ASCII值,但是当它循环时,它开始继续读取enter以及其他字符。
我的另一个问题是我希望我的程序在读取'#'时停止并将其打印为无效,我似乎无法做到。代码看起来像这样:
#include <stdio.h>
int main() {
char input;
while (input != '#') {
printf("nEnter character: n");
scanf("%c*c", & input);
printf("The ASCII value is: %d", (int) input);
if (input == '#') break;
}
printf("n# is invalid");
return (0);
}
您试图用
抑制换行符scanf("%c*c", & input);
但是你忘记了抑制中的%
,
scanf("%c%*c", & input);
可以在第一个格式说明符之后添加空白。它使程序读取任何空白(包括Enter),但不存储它。
scanf("%c ", & input);
这在下一页中有清楚的解释。请参阅"参数"部分,并转到标题为"空白字符"的段落。
http://www.cplusplus.com/reference/cstdio/scanf/CORRECTION我的意思是,如果我们在像下面这样的情况下在两个格式说明符之间使用空格,那么它会"吃掉"Enter或其他空格。我的错,在我上面的语句中,它会继续要求更多的空白,因为我们在所有格式说明符
之后使用空白。scanf("%c %d", &input1,&input2);
尝试fflush(stdin);
后扫描