Muorius 发表于 2019-2-15 18:10:04

新人求助

为什么程序不会运行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;
                }
        }
       
        }

Muorius 发表于 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.

82457097 发表于 2019-2-15 18:22:20

本帖最后由 82457097 于 2019-2-15 18:24 编辑

改代码之后重新编译了吗?if条件判断语句为什么要加“”双引号

Muorius 发表于 2019-2-15 18:28:42

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

我一开始就不行了,然后才改了试试出现什么问题

82457097 发表于 2019-2-15 18:31:34

Muorius 发表于 2019-2-15 18:28
我一开始就不行了,然后才改了试试出现什么问题

把if语句条件判断语句的双引号去了试试撒{:10_254:}是不是小甲鱼老师教你加引号的

Muorius 发表于 2019-2-15 18:32:58

找到原因了,原来if语句里加了“”{:5_104:}

jackz007 发表于 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") ;
                elseprintf("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") ;
                elseprintf("it is noleap year\n")                                             ;
      }
}


    这个条件判断如果用文字描述,表面上相当复杂,实际上逻辑很简单,一条语句足矣。

82457097 发表于 2019-2-15 18:38:47

Muorius 发表于 2019-2-15 18:32
找到原因了,原来if语句里加了“”

真正的错误好像不是这个 我来研究就研究 你这个开关好像改变a的值了 我也不太确定 调试一下看看

Muorius 发表于 2019-2-15 18:39:21

82457097 发表于 2019-2-15 18:31
把if语句条件判断语句的双引号去了试试撒是不是小甲鱼老师教你加引号的

我是看了问题先自己做的,程序还有一个问题,应该把switch里的第一个a换成其他变量{:10_264:},感谢你的回答{:5_109:}

82457097 发表于 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;
                                }
      }
      
      }
      }

Muorius 发表于 2019-2-15 23:06:59

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

和我改完的差不多{:5_91:}

Muorius 发表于 2019-2-16 10:15:10

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




我还没开始学循环控制程序,等学了再回来看看{:9_227:}

jackz007 发表于 2019-2-16 11:30:28

Muorius 发表于 2019-2-16 10:15
我还没开始学循环控制程序,等学了再回来看看

      重点在条件判断,不在循环,增加循环的目的只是为了让代码无条件反复执行,不至于运行 1 次就结束。
页: [1]
查看完整版本: 新人求助