C语言关于循环可用问题

来源:百度知道 编辑:UC知道 时间:2024/06/16 02:10:09
在求任意系数值的一元二次方程任意实根的程序中,加入可循环使用功能,即程序执行后,询问用户是否继续求解。如果回答“Y”,则继续提示输入a,b,c值求根;如果回答“N”,则程序运行结束。
快疯了啊。。。。
我用GOTO 编,找不到错在哪里啊。到底怎么错了,提示下,或给我个答案,谢谢。
# include<stdio.h>
# include<math.h>
void main()
{
float a,b,c,disc,x1,x2;
char e;

loop: scanf("%f,%f,%f",&a,&b,&c);
disc=b*b-4*a*c;
if(disc>=0)
{
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("x1=%f,x2=%f",x1,x2);
}
else printf("the real answers don't exit");
printf("are you go on?");
scanf("%c",&e);
if(e=='Y') goto loop;
}

两个问题:
1.你在输入系数时,必须按你的输入格式输入即"%f,%f,%f",每输入一个系数,就要输入一个逗号,当三个系数全输入完时,在输入回车。
2.当循环时使用scanf函数时,要清除缓冲区内容(scanf函数是缓冲输入,类似与栈的形式,必须清除)。例如我下面改的地方,加入setbuf(stdin,NULL).
# include<stdio.h>
# include<math.h>
void main()
{
float a,b,c,disc,x1,x2;
char e;
loop: scanf("%f,%f,%f",&a,&b,&c);
setbuf(stdin,NULL); //清除缓冲去内容
disc=b*b-4*a*c;
if(disc>=0)
{
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("x1=%f,x2=%f",x1,x2);
}
else
printf("the real answers don't exit");
printf("are you go on?");
scanf("%c",&e);
if(e=='Y')
goto loop;
}

我想你的错误可能在于
那句输入语句
scanf("%f,%f,%f",&a,&b,&c);
改写成
scanf("%f%f%f",&a,&b,&c);
因为上面的输入还需要输入逗号.
咯咯

试试这个,用do while的

# include<stdio.h>
# include<math.h>