【问题标题】:how I can I stop the program from reading 'Enter' as an input?如何阻止程序读取“Enter”作为输入?
【发布时间】:2013-04-06 12:55:28
【问题描述】:

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

【问题讨论】:

  • 这真是一种奇怪的行为
  • 你应该初始化input

标签: c while-loop ascii break enter


【解决方案1】:

你试图用

来抑制换行符
scanf("%c*c", & input);

但是你忘记了压制中的%

scanf("%c%*c", & input);

应该做你想做的。

【讨论】:

  • 感谢它的工作我感谢大家的所有帮助
【解决方案2】:

您可以在第一个格式说明符之后添加一个空格。它会导致程序读取任何空格(包括 Enter)但不存储它。

scanf("%c ", & input);

这在下页中有清楚的解释。请参阅“参数”部分并​​转到标题为“空白字符”的段落。

http://www.cplusplus.com/reference/cstdio/scanf/

更正我的意思是,如果我们在以下情况下在两个格式说明符之间使用空格,那么它会“吃掉” Enter 或其他空格。我的错,在上面的声明中我的,它会继续要求更多的空格,因为我们在所有格式说明符之后都使用空格

scanf("%c %d", &input1,&input2);

【讨论】:

  • 这不起作用,scanf 将等待更多的空白字符。
  • @effeffe 实际上,它会忽略 1 个或多个“Enters”作为输入。但是一旦输入了非空白值,它就会被接受,对应于scanf() 格式字符串。仔细浏览那个链接,你就会明白我的意思。如果在格式字符串中你有一个 %c 和 %d 用空格分隔,那么在接受一个字符后,scanf() 会忽略所有空格(包括输入),但当输入一个整数时,它被接受。
  • 我们只需要读取 一个 换行符,而不是“一个或多个”。这使程序无法使用,您尝试过吗?关于您的编辑:在这种情况下,格式字符串中的空格是无用的,因为"%d" 在尝试读取整数之前已经消耗了任何空白字符。
  • @effeffe Mate,我认为链接站点“cplusplus”是一个可靠的站点。我错了吗?请告诉我。这是该站点中提到的有关 scanf() 格式字符串中的空格的内容- --"空白字符:该函数将读取并忽略在下一个非空白字符之前遇到的任何空白字符(空白字符包括空格、换行符和制表符 -- 参见 isspace)"
  • @effeffe 我个人更喜欢上面提到的 Daniel Fischer 的方式。但是空格是另一种方式。因此我指出了这一点。
【解决方案3】:

scanf 后试试fflush(stdin);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 2017-06-26
    • 1970-01-01
    相关资源
    最近更新 更多