大家好我刚刚完成我的程序,它读取任何单个字符并打印该字符的ASCII值但是当它循环时它开始继续读入输入以及另一个字符。
我的另一个问题是我希望我的程序在读取'#'时停止并将其打印为无效,我似乎无法执行此代码如下所示:
#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);
}
答案 0 :(得分:3)
您尝试使用
来抑制换行符scanf("%c*c", & input);
但你忘记了抑制中的%
,
scanf("%c%*c", & input);
应该做你想做的事。
答案 1 :(得分:0)
您可以在第一个格式说明符后添加空格。它会导致程序读取任何空格(包括回车)但不能存储它。
scanf("%c ", & input);
下面的页面清楚地解释了这一点。请参阅“参数”部分并转到标题为“空白字符”的段落。
http://www.cplusplus.com/reference/cstdio/scanf/
更正我的意思是,如果我们在以下情况下使用两个格式说明符之间的空格,那么它会“吃掉”Enter或其他空格。很糟糕,在上面的语句中因为我们在所有格式说明符之后使用空格
,它将继续要求更多的空格scanf("%c %d", &input1,&input2);
答案 2 :(得分:0)
在scanf之后尝试fflush(stdin);