|
发表于 2020-8-4 12:48:46
|
显示全部楼层
本帖最后由 风过无痕1989 于 2020-8-4 12:56 编辑
- #include <stdio.h>
- #include <math.h>
- int main()
- {
- double a,b,c,disc,p,q,x1,x2;
- scanf("%lf,%lf,%lf",&a,&b,&c);
- disc=b*b-4*a*c;
- if (disc >= 0)
- {
- p=(-b)/(2.0*a);
- q=sqrt(disc)/(2.0*a);
- x1=p+q;
- x2=p-q;
- printf("x1=%f\nx2=%f\n",x1,x2);
- }
- else
- {
- printf("此方程无实数解\n");
- }
- return 0;
- }
复制代码
键盘输入 scanf() 函数是严格按照你在引号内的格式从缓冲区读取字符。一般情况下引号之间只写格式化要求,格式化内容要和输入内容一致,数与数、字符与字符之间可以用空格隔开,也可以用逗号隔开,否则就会出错。除了格式化操作符以外,不加任何其他字符,连空格都不要加。
scan在你输入一个数后,它是不会立即显示的,要等再接收到一个非(空格、制表符、回车)的输入语scanf句才结束。而且,最后输入的那个非(空格、制表符、回车)的东西是不会被这个scanf读进来的,而是留在输入流里。
scanf("%d,%d,%d",&a,&b,&c),在每个数字之间需要输入逗号,否则后面的变量就无法正常赋值。假如你先输入18,然后输入逗号以外的其他非数字字符, scanf()会认为第一个int型变量输入完成,将18赋值给变量a;然后就会一直等待你输入逗号,但是你迟迟没有输入,超时之后程序没有正常给变量bc赋值,你的程序运行结果肯定和你的预期不一样。
|
|