Blue_Zx 2024-10-09 17:07 采纳率: 68.2%
浏览 4
已结题

为什么加了else就无法正常运行?

请问这两种代码有什么区别吗(主要是最后的几个语句不同)?为什么第一种可以过,但是第二总不能正常运行?

img


```c
#include <stdio.h>

int main()

{
    int a=0,b=0,c=0,d=0,e=0,f=0;
    char ch;

    while((ch=getchar())!='@')
    {
        if(ch=='(')
        {
            a++;
        }else if(ch==')')
        {
            b++;
        }else if(ch=='[')
        {
            c++;
        }else if(ch==']')
        {
            d++;
        }else if(ch=='{')
        {
            e++;
        }else if(ch=='}')
        {
            f++;
        }

    }if(a!=b)
        {
            printf("()");
        }
         if(c!=d)
        {
            printf("[]");
        }
        if(e!=f)
        {
            printf("{}");
        }
        if((a==b)&&(c==d)&&(e==f))
        {
            printf("NULL");
        }
    return 0;

}

```c
#include <stdio.h>

int main()

{
    int a=0,b=0,c=0,d=0,e=0,f=0;
    char ch;

    while((ch=getchar())!='@')
    {
        if(ch=='(')
        {
            a++;
        }else if(ch==')')
        {
            b++;
        }else if(ch=='[')
        {
            c++;
        }else if(ch==']')
        {
            d++;
        }else if(ch=='{')
        {
            e++;
        }else if(ch=='}')
        {
            f++;
        }

    }if(a!=b)
        {
            printf("()");
        }
         else if(c!=d)
        {
            printf("[]");
        }
        else if(e!=f)
        {
            printf("{}");
        }
        else if((a==b)&&(c==d)&&(e==f))
        {
            printf("NULL");
        }
    return 0;

}

  • 写回答

2条回答 默认 最新

  • 一轮明月照丘壑 2024-10-09 17:08
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    这两种代码的主要区别在于最后的几个判断语句的结构。在你的第一个代码中,你没有使用 else 语句连接所有的条件判断。这意味着无论何种情况,都会至少执行其中一个 printf 语句。也就是说,只要有一种括号的数量不相等,就会输出相应的括号信息,并且如果所有括号的数量都相等,还会输出 "NULL"。

    而在你的第二个代码中,你使用了 else if 连接了所有的条件判断。这意味着只有当前面的条件不满足时,才会进行下一个判断。因此,只有在所有之前的括号数量都相等的情况下,才会进行最后一个判断 (a==b)&&(c==d)&&(e==f) 并输出 "NULL"。如果在此之前有任何一对括号的数量不相等,都会直接输出对应的括号信息并结束判断,不会继续检查其他的括号对。这就是第二个代码无法正确输出 "NULL" 的原因。

    所以,这两种代码在处理括号数量相等的情况时有所不同。第一个代码会输出 "NULL",而第二个代码则不会。如果你的意图是只有在所有括号的数量都相等时才输出 "NULL",那么你应该使用第二个代码的结构。如果你的意图是只要有任何一对括号的数量不相等就输出对应的括号信息,并且在所有括号的数量都相等时再额外输出 "NULL",那么你应该使用第一个代码的结构。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月20日
  • 已采纳回答 10月12日
  • 创建了问题 10月9日