回 帖 发 新 帖 刷新版面

主题:[讨论]亟待解决的问题!

小弟是初学者  深知论坛卧虎藏龙 有些代码不知道哪个地方出错了希望给看一下 每次总是输出的时候出错 不管输入什么都是出来的0.000很是疑惑不解 希望一下 感激不尽!
顺便一提我用的是win7 用的编译器是win-tc!本代码纯属是为了 巩固所学的内容

代码如下:


#include<stdio.h>
#include<math.h>
#include<stdlib.h>
void main()
{
    int choice;
    int year;
    double a,b,c,area,s,max;
    char oper;
    printf("* * * * * * * * Menu * * * * * * * *\n");
    printf("*      1.The biggest number        *\n");
    printf("*      2.Reconize the leap year    *\n");
    printf("*      3.The area of the triangle  *\n");
    printf("*      4.Simple calculation        *\n");
    printf("*      0.Exit                      *\n");
    printf("* * * * * * * * * * * * * * * * * * *\n");
    printf("Please select(0-4):");
    scanf("%d",&choice);
    switch(choice)
    {
    case 1:
        printf("Please input number(a,b,c):");
        scanf("%f%f%f",&a,&b,&c);
        if (a>b)
            {if (a>c)
                max=a;
            else
                max=c;
            }
            else
                {if (b>c)
                    max=b;
                else
                    max=c;
                }
                printf("The max nimber is %f\n",max);
                break;
    case 2:
        printf("Please input the year:");
        scanf("%d",&year);
        if ((year%4==0)&&(year%100!=0)||(year%400==0))
            printf("%4d is a leap year",year);
        else
            printf("%4d is not a leap year",year);
        break;
    case 3:
        printf("Please input a,b,c:");
        scanf("%f%f%f",&a,&b,&c);
        if (a<=0||b<=0||c<=0||a+b<c||b+c<a||a+c<b)
            printf("data error!\n");
        else
        {
            s=(a+b+c)/2;
            area=sqrt(s*(s-a)*(s-b)*(s-c));
            printf("area=%f",area);
        }
        break;
    case 4:
        printf("input expression[a op b]:");
        scanf("%f%c%f",&a,&oper,&b);
        switch(oper)
        {
        case '+':
            printf("%5.1f%c%5.1f=%5.1f\n",a,oper,b,a+b);
            break;
        case '-':
            printf("%5.1f%c%5.1f=%5.1f\n",a,oper,b,a-b);
            break;
        case '*':
            printf("%5.1f%c%5.1f=%5.1f\n",a,oper,b,a*b);
            break;
        case '/':
            printf("%5.1f%c%5.1f=%5.1f\n",a,oper,b,a/b);
            break;
        default:printf("input error!\n");
        }
        break;
        case 0 :
            exit(0);
            break;
        default:printf("error!\n");

    }
    getch();
}
谢谢
有什么错误还请一定要指出来!

回复列表 (共8个回复)

沙发


        scanf("%f%f%f",&a,&b,&c);

modify:
scanf("%lf %lf %lf", &a,&b,&c);

板凳

double的输入输出严格来说都应该采用%lf
另外为了提高代码的健壮性,建议可以在每个scanf的格式字符串的左"后面加个空格以便过滤特殊字符
void main是不符合标准的,如果想给main写返回类型那么只应该是int main
还有部分英文单词拼写错误,就不逐一纠正了

3 楼

最后那个getch()有什么用处?请指教下

4 楼

[quote]最后那个getch()有什么用处?请指教下[/quote]
最后的输入只是便于观察而已!没有...什么特殊的作用

5 楼


scanf("%f%f%f",&a,&b,&c);

用scanf输入时必须要前后对应哦  应该是:scanf("%f,%f,%f",&a,&b,&c);格式必须一

6 楼

[quote]
scanf("%f%f%f",&a,&b,&c);

用scanf输入时必须要前后对应哦  应该是:scanf("%f,%f,%f",&a,&b,&c);格式必须一

样[/quote]
问题不在于分隔符
“输入前后对应”不是说格式字符串里也必须用逗号做分隔符的

7 楼


谢谢!受教!学到太多了,还有十分感谢将细节的错误都给指出来了!十分感谢![em1]

8 楼

[quote][quote]
scanf("%f%f%f",&a,&b,&c);

用scanf输入时必须要前后对应哦  应该是:scanf("%f,%f,%f",&a,&b,&c);格式必须一

样[/quote]
问题不在于分隔符
“输入前后对应”不是说格式字符串里也必须用逗号做分隔符的[/quote]
受教了!反正我习惯前后都用“,”隔开  呵呵

我来回复

您尚未登录,请登录后再回复。点此登录或注册