我怎么能阻止程序读取'输入'作为输入?

时间:2013-04-14 09:49:49

标签: c while-loop ascii break enter

大家好我刚刚完成我的程序,它读取任何单个字符并打印该字符的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);
}

3 个答案:

答案 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);