我正在为计费系统编写程序。我在我的程序中使用do-while循环。并且程序根据用户输入执行。如果用户想继续执行,程序将继续。但我在执行方面遇到了问题。我在简单的do-while循环中尝试我的逻辑。同样的问题也出现在简单的do-while循环中。
Problem is: If the input is yes, the program does not get the further input from user.
这个简单的do-while循环是:
#include <stdio.h>
main()
{
int c;
char ch;
do
{
printf("enter the no less then 4:");
scanf("%d",&c);
switch(c)
{
case 1:
printf("In 1\n");
break;
case 2:
printf("In 2\n");
break;
case 3:
printf("In 3\n");
break;
}
printf("do u want to continue?:");
ch=getchar();
}while(ch=='y');
}
如果我放while(ch != 'n')
而不是while(ch=='y')
该程序正常运行。我无法理解这背后的问题。请帮我纠正这个问题。并解释这个问题。谢谢你提前。
答案 0 :(得分:2)
首次运行,打印3,用户输入“y”并按回车
getchar()读取'y'和程序循环
第二次,getchar()从上一次按键
中读取换行符换行符不是'y'所以程序不循环
答案 1 :(得分:1)
几个问题:
ch
必须是int
,就像c一样。scanf("%d", &c);
while
应该测试EOF,如while ((ch = getchar()) != EOF)
这应该非常强大:
#include <stdio.h>
int main(void)
{
int c, ch;
for (;;) {
printf ("Enter a number (1, 2 or 3):");
fflush (stdout);
if (scanf ("%d", &c) == 1) {
switch (c) {
case 1:
printf ("In 1\n");
break;
case 2:
printf ("In 2\n");
break;
case 3:
printf ("In 3\n");
break;
}
printf ("Do you want to continue? [y/n]:");
fflush (stdout);
while ((ch = getchar ())) {
if (ch == 'y')
break;
else if (ch == 'n' || ch == EOF)
return 0;
}
} else {
printf ("That was not a number. Exiting.\n");
return 0;
}
}
}
答案 2 :(得分:0)
虽然(ch =='y')或者while()中的任何字符,它会按照你的编码发送到案例3 ......你是按,它会被发送到案例3,否则它将无法工作
答案 3 :(得分:0)
请使用getchar
。
fgets
阅读答案
正如其他人所解释的那样,第二个getchar
来电会为您提供换行符,该换行符是在第一个y
之后输入的。
使用fgets
,您将获得用户输入的所有内容。然后你可以检查它是y
(只检查第一个字符,或使用strcmp
)。