错误:添加显式大括号以避免悬空。 C

时间:2015-07-23 23:35:55

标签: c

我正在使用gedit而且我的编译器是clang。 我最近得到了几个这样的错误,不知道如何解决(标题错误和引用else语句)。

 if(isupper(ptext[i]))
            if ((((ptext[i]+k)%26)+52) < 65 || (((ptext[i]+k)%26)+52) > 90)
            {
                printf("%c", (((ptext[i]+k)%26)+78));
            }
            else
            {
                printf("%c", (((ptext[i]+k)%26)+52));
            }

我应该添加/删除/修复什么? 在此先感谢:)

2 个答案:

答案 0 :(得分:7)

你的外if缺少大括号:

if(isupper(ptext[i]))
{
        if ((((ptext[i]+k)%26)+52) < 65 || (((ptext[i]+k)%26)+52) > 90)
        {
            printf("%c", (((ptext[i]+k)%26)+78));
        }
        else
        {
            printf("%c", (((ptext[i]+k)%26)+52));
        }
}

就个人而言,我会将一些常见元素提取到变量中:

char something1 = ptext[i];
if(isupper(something1))
{
    char something2 = (something1+k)%26;
    if ((something2+52) < 65 || (something2+52) > 90)
    {
        printf("%c", (something2+78));
    }
    else
    {
        printf("%c", (something2+52));
    }
}

甚至可能在那里放一个char something3 = something2 + 52;。当然,有更有意义的变量名。

答案 1 :(得分:6)

C与Python不同,它告诉什么属于缩进的内容。因为在C中,所有空格都被忽略。 您需要使用大括号来告诉编译器if所属的else语句。

C编译器不知道,所以要求你指定:

这是吗?

 if(isupper(ptext[i]))
 {
            if ((((ptext[i]+k)%26)+52) < 65 || (((ptext[i]+k)%26)+52) > 90)
            {
                printf("%c", (((ptext[i]+k)%26)+78));
            }
            else
            {
                printf("%c", (((ptext[i]+k)%26)+52));
            }
 }

还是这个?

 if(isupper(ptext[i]))
 {
            if ((((ptext[i]+k)%26)+52) < 65 || (((ptext[i]+k)%26)+52) > 90)
            {
                printf("%c", (((ptext[i]+k)%26)+78));
            }
 }
 else
 {
            printf("%c", (((ptext[i]+k)%26)+52));
 }

这是一个“悬空”的例子。