【问题标题】:Continue/end an infinite while loop based on user input [duplicate]根据用户输入继续/结束无限循环[重复]
【发布时间】:2015-04-29 21:08:33
【问题描述】:

我被要求编写一个程序来执行某些任务,如果用户输入'y',它会重复自己,或者如果用户在任务结束时输入'n',则结束。为了简单起见,让我们说它打印“祝你有美好的一天”的任务。 这是我的代码:

 int main(void) {
 char cont;
 bool repeat = true;

 while (repeat == true){

 printf("Have a nice day!\n");

 printf("continue to print?\n");

 scanf("%c",&cont);

 if (cont == 'n') {repeat = false;}} 
 }

但是,输出似乎不正确。输入'y'两次然后'n'一次后的实际输出是

Have a nice day!
continue to print?
y
Have a nice day!
continue to print?
Have a nice day!
continue to print?
y
Have a nice day!
continue to print?
Have a nice day!
continue to print?
n

反对

Have a nice day!
continue to print?
y
Have a nice day!
continue to print?
y
Have a nice day!
continue to print?
n

所以基本上每次输入“y”时,消息都会打印两次而不是一次。知道我哪里做错了吗?

【问题讨论】:

  • 尝试" %c"作为您的格式字符串(前导空格是有意的)。对scanf 的评论也可能会有所帮助。
  • 请考虑将条件写成if(repeat)。对布尔文字的显式比较是非常多余的(比较的结果本身就是一个布尔值)。代码越少越好,只要清楚就好,而且if(repeat)很清楚,读起来也不错。
  • @Randomstudent 查看链接的副本。
  • 更改为 do{…;…;…;…}while(exitCondition ! true);

标签: c


【解决方案1】:
scanf("%c",&cont);

应该是

scanf(" %c",&cont);

在第一个输入的末尾有一个换行符,它在下一次迭代中被%c 选中。注意%c 之前的空格,它消耗换行符

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 2015-06-07
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多