鱼C论坛

 找回密码
 立即注册
查看: 2769|回复: 12

新人求助

[复制链接]
发表于 2019-2-15 18:10:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么程序不会运行else的语句?比如输入2000,输出的语句是it is noleap year。
int main()
{
        int a;
        printf("input a number of year\n");
        scanf_s("%d", &a);
        switch (a = (a % 4) == 0 ? 1 : 0)
        {
        case 0:
                printf("it is noleap year"); break;
        case 1:
        {
                if ("a % 400!=0")
                {
                        printf("it is noleap year"); break;
                }
                else
                {
                        printf("it is leap year"); break;
                }
        }
       
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-2-15 18:17:37 | 显示全部楼层
如果把case1改成
{
                if ("a % 400==0")
                {
                        printf("it is leap year"); break;
                }
                else
                {
                        printf("it is noleap year"); break;
                }
        }
则,如果输入2100,输出的语句是it is leap year.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-15 18:22:20 | 显示全部楼层
本帖最后由 82457097 于 2019-2-15 18:24 编辑

改代码之后重新编译了吗?if条件判断语句为什么要加“”双引号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-15 18:28:42 | 显示全部楼层
82457097 发表于 2019-2-15 18:22
改代码之后重新编译了吗?if条件判断语句为什么要加“”双引号

我一开始就不行了,然后才改了试试出现什么问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-15 18:31:34 | 显示全部楼层
Muorius 发表于 2019-2-15 18:28
我一开始就不行了,然后才改了试试出现什么问题

把if语句条件判断语句的双引号去了试试撒是不是小甲鱼老师教你加引号的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-15 18:32:58 | 显示全部楼层
找到原因了,原来if语句里加了“”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-15 18:37:09 | 显示全部楼层
本帖最后由 jackz007 于 2019-2-15 19:33 编辑

      多点条件判断容易导致逻辑冲突和混乱,造成代码重复和程序结构复杂化,参考一下下面的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main(void)
{
        int a                                                                         ;
        for(;;) {
                printf("input a number of year\n")                                    ;
                scanf("%d" , & a)                                                     ;
                if(! (a % 4) && (a % 100 || ! (a % 400))) printf("it is leap year\n") ;
                else  printf("it is noleap year\n")                                   ;
        } 
}

       以上关于润年判断的代码基于格里历,只能适用于 1582 年以后,如果要突破此限制,需要兼容儒略历,不麻烦,只要继续增加一个条件判断即可。下面是修改后的程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main(void)
{
        int a                                                                                     ;
        for(;;) {
                printf("input a number of year\n")                                                ;
                scanf("%d" , & a)                                                                 ;
                if(! (a % 4) && (a < 1582 || a % 100 || ! (a % 400))) printf("it is leap year\n") ;
                else  printf("it is noleap year\n")                                               ;
        } 
}

    这个条件判断如果用文字描述,表面上相当复杂,实际上逻辑很简单,一条语句足矣。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-15 18:38:47 | 显示全部楼层
Muorius 发表于 2019-2-15 18:32
找到原因了,原来if语句里加了“”

真正的错误好像不是这个 我来研究就研究 你这个开关好像改变a的值了 我也不太确定 调试一下看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-15 18:39:21 | 显示全部楼层
82457097 发表于 2019-2-15 18:31
把if语句条件判断语句的双引号去了试试撒是不是小甲鱼老师教你加引号的

我是看了问题先自己做的,程序还有一个问题,应该把switch里的第一个a换成其他变量,感谢你的回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-15 18:55:17 | 显示全部楼层
Muorius 发表于 2019-2-15 18:39
我是看了问题先自己做的,程序还有一个问题,应该把switch里的第一个a换成其他变量,感谢你的 ...

恩 不客气!你先自己做 我试了一下 你这代码好像有点逻辑问题 下面是我改的代码 你可以借鉴一下 讨论一下思路 互相学习 哈哈~
#include<stdio.h>
int main()
{
        int a,i;
        printf("input a number of year\n");
        scanf("%d", &a);
        i=a;
        switch (i = (i % 400) == 0 ? 1 : 0)
        {
        case 1:
                printf("it is leap year"); break;
        case 0:
        {
                if (a%100==0)
                {
                        printf("it is noleap year"); break;
                }
                else if(a%4==0)
                {
                        printf("it is leap year"); break;
                }
                else 
                {
                        printf("it is noleap year"); break;
                                }
        }
        
        }
        } 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-15 23:06:59 | 显示全部楼层
82457097 发表于 2019-2-15 18:55
恩 不客气!你先自己做 我试了一下 你这代码好像有点逻辑问题 下面是我改的代码 你可以借鉴一下 讨论一下 ...

和我改完的差不多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-16 10:15:10 | 显示全部楼层
jackz007 发表于 2019-2-15 18:37
多点条件判断容易导致逻辑冲突和混乱,造成代码重复和程序结构复杂化,参考一下下面的代码:

我还没开始学循环控制程序,等学了再回来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-16 11:30:28 | 显示全部楼层
Muorius 发表于 2019-2-16 10:15
我还没开始学循环控制程序,等学了再回来看看

        重点在条件判断,不在循环,增加循环的目的只是为了让代码无条件反复执行,不至于运行 1 次就结束。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 08:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表