C语言中的一个小问题,麻烦大神看一下

原先代码如下:
#include <stdio.h>
#include <math.h>
int main()
{
int k; //注意注意注意注意注意注意注意注意注意注意注意注意注意
double a,b,c,disc,p,q,x1,x2;
do{
do{
printf("please input the three constants");
scanf("%lf,%lf,%lf",&a,&b,&c);
disc=b*b-4*a*c;
}
while(disc<0);
p=-b/(2*a);
q=sqrt(disc/(2*a));
x1=p+q;
x2=p-q;
printf("x1=%10.5f\nx2=%10.5f\n",x1,x2);
printf("try again?\n");
scanf("%d",&k); //注意注意注意注意注意注意注意注意注意注意注意注意注意
}
while(k); //注意注意注意注意注意注意注意注意注意注意注意注意注意
system("pause");
return 0;
}
代码没有错误,也能达到如下预期的功能:
输入a、b、c三个实数,如果判别式<0,则重新要求输入,如果判别式>0,则解出两个实根并输出。并显示"try again"询问是否继续解方程。若输入的k值是1,则循环并提示再次输入三个实数;若输入k值是0,则结束。
以上都没有出现问题。
我接下来的改进是:将有“注意”注释的三行改一下,想让输入的k值不是0或1,而是y或n。代码如下:
#include <stdio.h>
#include <math.h>
int main()
{
char k; //注意注意注意注意注意注意注意注意注意注意注意注意注意
double a,b,c,disc,p,q,x1,x2;
do{
do{
printf("please input the three constants");
scanf("%lf,%lf,%lf",&a,&b,&c);
disc=b*b-4*a*c;
}
while(disc<0);
p=-b/(2*a);
q=sqrt(disc/(2*a));
x1=p+q;
x2=p-q;
printf("x1=%10.5f\nx2=%10.5f\n",x1,x2);
printf("try again?\n");
scanf("%c",&k); //注意注意注意注意注意注意注意注意注意注意注意注意注意
}
while(k=='y'); //注意注意注意注意注意注意注意注意注意注意注意注意注意
system("pause");
return 0;
}
也就是把k改成了单字符类型。但接下来运行就出问题了。根本就没有提示输入k值,直接结束了。实在不知道问题出在哪。麻烦大神指点,谢谢!

前面,第一次也就是开头那里的scanf,数据输入完毕后跟着一个回车,这个回车没有被处理掉,还在标准输入流里面等待被读入,然后到第二个scanf也就是 scanf("%c",&k);被读入了,这里读入的是回车。
因为有字符可以读入,所以程序没有停顿等待你输入。

原因解释清楚了,剩下的好办了,把那个回车处理掉就行了。
scanf("%lf,%lf,%lf",&a,&b,&c)之后, scanf("%c",&k); 之前,找个地方添加一句
scanf("%c",&k); 或者k=getchar()就办了
温馨提示:内容为网友见解,仅供参考
无其他回答

C语言中的一个小问题,麻烦大神看一下
前面,第一次也就是开头那里的scanf,数据输入完毕后跟着一个回车,这个回车没有被处理掉,还在标准输入流里面等待被读入,然后到第二个scanf也就是 scanf("%c",&k);被读入了,这里读入的是回车。因为有字符可以读入,所以程序没有停顿等待你输入。原因解释清楚了,剩下的好办了,把那个回车处理掉...

C语言问题,求大神解决,谢谢拉。。我是小白,解释下原因
答案就是 A) 1

C语言问题,求大神解决,谢谢啦,我是小白,最好能够解释下原因..
第二项和第四项结果等同都是指向指针的指针操作。可以将二维数组看成一个双重指针,第一个中括号是一个一重指针。比如说a[n][m]中a[0]是一个指向a[0][m]数组首位a[0][0]的指针,而a则是指向指针数组*a[n]的首位a[0]的指针。这样我们来看B选项,*(a+2)表示一个指向a[2][0]的指针...

c语言小问题,向大神求解。。
第二个问题:int a[][3]={8} ,第一个忽略不写,编译器会在编译的时候指定计算,比如这句相当于int a[1][3]={8};(由编译器算出),能存放1*3个int型成员,数组初始化为a[0][0]=8,a[0][1]=0,a[0][2]=0,因为只给了8,所以后面成员为0,

C语言的一道题不会做了,求大神帮一下
第一题: a=4,b=8, 所以 (b==a) 为假,假就是 0,c= (b==a); c 得 0。语句中 a,b 数值 未发生过变化,保持初始值 a=4,b=8。所以输出 a,b,c 印出: 4,8,0 第二题:输入58,a=58;a>50 的条件成立,输出a值,印58 a>40 的条件成立,输出a值,印58 a>...

发现了一个有趣的c语言问题,请各位大神帮忙解释一下。
2.scanf("%d",20000)这句合法并没有什么难以理解的地方,因为指针归根到底也只是一个地址值罢了,直接用地址值和直接用指针,这没有任何区别,最多就是编译器会警告你一下。不知道你说的“”自己定义一个函数比如f(*pointer);然后在用这种方法就会报错“”是什么意思 看下面代码 include <stdio.h...

C语言问题,求大神解决,谢谢拉。。我是小白,解释下原因
x<<=3:把x的二进制位向左移动3位 因为x=1,所以 x的二进制为:0000 0001 向左移动3位后为:0000 1000 0000 1000转为10进制位:2^3 = 8 所以,选:D

C语言的一道题 我不知道错哪了 要怎么改。 跪请大神指点,别把百度上的...
include<stdio.h>void main(void){double a,b,c;printf("请输入三边");scanf("%lf,%lf,%lf",&a,&b,&c);\/\/去掉\\n,你设置了输入格式,所以正确的输入格式是:以逗号隔开输入的数据if(a+b>c&&a+c>b&&b+c>a){if(a==b&&b==c)printf("等边三角形");else if(a*a+b*b==c*...

一个C语言的问题,求大神解答原因!
1、sub1中的变量a,b是其所在文件中定义的,其中a是静态全局变量,b是全局变量 a会默认初始化为0,因此第一次执行sub1()时输出结果中a=0+2=2, b=3+3=6。sub2中的变量a是其所在文件中定义的静态全局变量,因为与sub1()所处不同文件,因此变量a是不同的;而变量b是与另一个文件共享的全局...

请C语言大神看看这个题目,帮我解释一下怎么来的,表示本人新手
printf( char *fmt, ... ) 函数原型 第一部分是格式串fmt,用来表明,输出数据的格式 后面的余下部分为格式串中对应的变量 char*s="#include %cstdio.h%c%cchar*s=%c%s%c;%cint main(){printf(s,34,s,10,34);return 0;}"; \/\/这里就是定义一个格式串 printf(s,34,34,10,34,s...

相似回答
大家正在搜