【问题标题】:Why is my program not waiting for keypress("Enter") in C为什么我的程序不等待 C 中的 keypress("Enter")
【发布时间】:2016-12-05 11:40:16
【问题描述】:

仅当用户在两种情况下按下“Enter”时程序才会继续。但我的程序根本不等待用户按“Enter”,而是转到下一行代码。

  int T1 ,T2;
  char c1,c2;
  printf("Enter Temperature T1: ");
  scanf("%d",&T1);
  printf("Enter Temperature T2: ");
  scanf("%d",&T2);
  printf("Press Enter after setting temperature T1\n");
  scanf("%c",&c1);
  while(c1 != '\n' && c1 != EOF);
  printf("Press Enter after setting temperature T2\n");
  scanf("%c",&c2);
  while(c2 != '\n' && c2 != EOF);

【问题讨论】:

  • 使用 fgets 从键盘读取,使用 atoi 进行转换。 scanf 也将 ENTER 存储在缓冲区(stdin)中,缓冲区在对 scanf 的调用之间共享
  • 因为您在数字后按下的 Enter 键作为换行符被放入输入缓冲区,"%c" 格式将读取。
  • scanf("%c",&c1); -> scanf(" %c",&c1);(注意空格)
  • 请查看while(c1 != '\n' && c1 != EOF);,因为这些循环会挂起(没有任何变化)。
  • 请不要更正发布的代码 - 这会使问题变得毫无意义。

标签: c scanf enter


【解决方案1】:

首先,在%c(scanf(" %c",&c1);)之前留一个空格,因为没有空格的格式会读取下一个字符,即使它是空格,而有空格的格式会跳过空格(包括换行符)并读取下一个字符那不是空白。

其次,我上面提到的scanf之后的while循环会挂起你的代码,所以如果你想执行第二个printf语句,请把它注释掉。

【讨论】:

  • 所以我在 %c 之前添加了空格并将 while 循环重写为 while(c1 != '\n');现在我的代码挂起。我该怎么办?谢谢
  • 只对 while 循环进行评论。你的程序将成功运行。
  • 它仍然挂起。我真的不知道该怎么办。
  • 对所有的while循环进行注释。最后一个while循环将在执行最后一个printf语句后挂起你的代码。
猜你喜欢
  • 2015-05-15
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
  • 2015-12-23
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多