jialouluos 发表于 2020-10-4 16:20:21

一个萌新问题

#include<stdio.h>

int main()
{
        char x;
        printf("是否存入?(Y/N)\n");
        while(~scanf("%c",&x))
{
                if(x=='Y')
                {
        printf("请依次输入本金,利率,年份:");
                float money,n,r,P;
        scanf("%f %f %f",&money,&r,&n);
        r = r*0.01;
        P = money*r*n;
        printf("P=%.2f",P);
                }
               if(x=='N')
                {
                                printf("欢迎下次使用\n");
                }
                else
                {
                        printf("请输入正确指令(Y/N)\n");
                }
}       
                return 0;
}

各位大佬 我输入Y没问题 但是输入N或者其他就会这样显示
欢迎下次使用
请输入正确指令(Y/N)
输入其他也一样
请输入正确指令(Y/N)
请输入正确指令(Y/N)
这是怎么回事啊

kogawananari 发表于 2020-10-4 16:27:54

本帖最后由 kogawananari 于 2020-10-4 16:29 编辑

else都是与最近的一个if配对
第二个if改成else if吧

还有就是第二个if里是不是要break

jialouluos 发表于 2020-10-4 16:30:15

kogawananari 发表于 2020-10-4 16:27
else都是与最近的一个if配对
第二个if改成else if吧



改了之后还是一样的

jialouluos 发表于 2020-10-4 16:32:53

kogawananari 发表于 2020-10-4 16:27
else都是与最近的一个if配对
第二个if改成else if吧



break 有用 我再else if 和else 里面都加了一个break 就可以了 是什么原因啊 感觉像是循环了两次

昨非 发表于 2020-10-4 16:34:50

#include<stdio.h>

int main()
{
        char x;
        printf("是否存入?(Y/N)\n");
        scanf("%c", &x);
        while (true)
        {
                if (x == 'Y')
                {
                        printf("请依次输入本金,利率,年份:");
                        float money, n, r, P;
                        scanf("%f %f %f", &money, &r, &n);
                        r = r * 0.01;
                        P = money * r * n;
                        printf("P=%.2f", P);
                        break;
                }
                if (x == 'N')
                {
                        printf("欢迎下次使用\n");
                        break;
                }
                else
                {
                        printf("请输入正确指令(Y/N)\n");
                        scanf("%c", &x);
                }
        }
        return 0;
}

稍微改动了一下

jialouluos 发表于 2020-10-4 16:37:17

昨非 发表于 2020-10-4 16:34
稍微改动了一下

可以问下为什么不加break就会出现两次吗

昨非 发表于 2020-10-4 16:44:53

jialouluos 发表于 2020-10-4 16:37
可以问下为什么不加break就会出现两次吗

确实奇怪,不太明白

jialouluos 发表于 2020-10-4 16:51:37

昨非 发表于 2020-10-4 16:44
确实奇怪,不太明白

{:5_100:}

昨非 发表于 2020-10-4 17:43:05

jialouluos 发表于 2020-10-4 16:51


原理在于scanf方法,我不太理解,请参考http://c.biancheng.net/view/160.html

昨非 发表于 2020-10-4 17:53:58

本帖最后由 昨非 于 2020-10-4 18:00 编辑

jialouluos 发表于 2020-10-4 16:51


#include<stdio.h>
int main()
{
        char x;
        printf("是否存入?(Y/N)\n");
        scanf("%c", &x);
        getchar();
        while (true)
        {
                if (x == 'Y')
                {
                        printf("请依次输入本金,利率,年份:");
                        float money, n, r, P;
                        scanf("%f %f %f", &money, &r, &n);
                        r = r * 0.01;
                        P = money * r * n;
                        printf("P=%.2f", P);
                        break;
                }
                else if (x == 'N')
                {
                        printf("欢迎下次使用\n");
                        break;
                }
                else
                {
                        printf("请输入正确指令(Y/N)\n");
                        scanf("%c", &x);
                        getchar();
                }
        }
        return 0;
}

记得不要输入多个字符,不然还会出错,加个getchar()吞掉回车就好了,解决了记得给个最佳
页: [1]
查看完整版本: 一个萌新问题