| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 510 人关注过本帖
标题:求各位大侠看看这是怎么回事
只看楼主 加入收藏
qq_s15
Rank: 2
等 级:论坛游民
帖 子:30
专家分:28
注 册:2015-7-18
结帖率:100%
收藏
 问题点数:0 回复次数:4 
求各位大侠看看这是怎么回事
# include <stdio.h>
# include <math.h>

main(void)
{
        int a, b, c;
        double delta, x1, x2;
        printf("请输入a的值:");
        scanf("%d\n", &a);
        printf("你输入的值是:%d \n", a);
        printf("请输入b的值:");
        scanf("%d\n", &b);
        printf("请输入c的值:");
        scanf("%d\n", &c);
        delta = (b*b) - (4*a*c);

        if (delta >0)
        {
                x1 = (-b + sqrt(delta)) / (2*a);
                x2 = (-b - sqrt(delta)) / (2*a);
                printf("该一元二次方程有两个解, x1 = %f, x2 = %f \n", x1, x2);
        
        }
        else if (delta == 0)
        {
                x1 = (-b) / (2*a);
                printf("该一元二次方程有一个唯一解,x1 = %f \n", x1 );
        
        }
        else
        {
                printf("无解\n");
        }


        return 0;
}

图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: include double 
2015-07-18 19:25
T_MACC
Rank: 4
等 级:业余侠客
威 望:8
帖 子:99
专家分:211
注 册:2015-4-14
收藏
得分:0 
scanf("%d\n", &a);
\n的原因
2015-07-18 20:04
T_MACC
Rank: 4
等 级:业余侠客
威 望:8
帖 子:99
专家分:211
注 册:2015-4-14
收藏
得分:0 
    scanf \n全部去啦就可以啦    如果你只去掉第一个   或者第二个    是不行的     
scanf()    以你第一次输入的值为准,     scanf("%d\n", &a); 第一次输入1   按下回车    但是由于有\n  你不许再输入一个值才能进入下一步     
今晚网速有点菜  回答说不是很仔细     有空不上
2015-07-18 20:15
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:0 
俺数学差不知道介个解一元二次方程的公式对不对
就代码而言,有二个小bug
a.scanf()函数用了不该用的字符
b.main(void) 入口函数没有return 0 返回的数据类型

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

int main(void)
{
    int a, b, c;
    double delta, x1, x2;
    printf("请输入a的值:");
    scanf("%d", &a);
    printf("你输入a的值是:%d \n", a);
    printf("请输入b的值:");
    scanf("%d", &b);
    printf("你输入b的值是:%d \n", b);
    printf("请输入c的值:");
    scanf("%d", &c);
    printf("你输入c的值是:%d \n", c);
    delta = (b*b) - (4*a*c);

    if (delta >0)
    {
        x1 = (-b + sqrt(delta)) / (2*a);
        x2 = (-b - sqrt(delta)) / (2*a);
        printf("该一元二次方程有两个解, x1 = %f, x2 = %f \n", x1, x2);
    }
    else if (delta == 0)
    {
        x1 = (-b) / (2*a);
        printf("该一元二次方程有一个唯一解,x1 = %f \n", x1 );   
    }
    else
    {
        printf("无解\n");
    }

    return 0;
}
2015-07-18 21:44
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
    之所以会出现楼主所描述的问题,原因正如T_MACC版主所说的,根源在于scanf中的“\n”。楼主可以在输入完数据后马上输出三个变量的值,然后根据这个值就可以分析出原因。
    scanf中出现的“\n”就如同我们平时写的“scanf("%d:%d",&a,&b);”中的“:”,起到一个分隔符的作用。当我们运行程序,在提示下输入a的值时,比如输入“1”,然后回车,这个回车被认为是一个分隔符,所以系统会认为你还要继续输入数据,这就出现了楼主所描述的问题。当我们再输入一个数据并回车时,程序继续往下运行,此时,“1”被读走赋给变量a,之后的“5”和回车仍留在缓冲区里;当我们按照提示输入b的值时,比如输入“2”加回车,此时scanf从缓冲区中读出上一次留下的“5”赋给了变量b,而上一次留下的回车又被当作了分隔符,所以此时缓冲区里留下的就是“2”和回车;程序继续执行,提示我们输入c的值,我们按照提示输入“3”加回车,scanf从缓冲区中读出上一次留下的“2”赋给变量c,回车同样被当作了分隔符,而我们最后输入的“3”和回车仍然留在缓冲区,同时最后的输入也使得scanf语句正常结束。


[ 本帖最后由 取名字 于 2015-7-18 23:49 编辑 ]
2015-07-18 23:48
快速回复:求各位大侠看看这是怎么回事
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020020 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved