嵌套if语句:输入结束时的预期声明或语句

时间:2012-06-08 22:55:59

标签: c if-statement

我们老师给出的任务是创建一个程序,要求提出两个整数xy以及一个字符z。为z输入的字母可以是a,它会添加两个整数,s会减去它们,m乘以d除以。

老师试图在课堂上解释多个'如果''其他'的陈述;但是,我担心我不能在缺少“{”的地方做出正面或反面。如果能够更好地理解这一点的人可以解释为什么以及缺少“{”的原因,那将是非常感激的。

#include <stdio.h>

int main(void)
{
char let;
int x;
int y;
int a;
int s;
int m;
int d;

printf("Enter command letter \n");
scanf("%c", &let);

printf("Enter both integers \n");
scanf("%d%d%c", &x, &y);

if (let==a)
{
    a=x+y;
    printf("x+y is %d \n", a);
}

else
{
    if (let==s)
    {
            s=x-y;
            printf("x-y is %d \n", s);
    }

    else
    {
             if (let==m)
            {
                    m=x*y;
                    printf("x*y is %d \n", m);
            }

    else
    {
                    d=x/y;
                    printf("x/y is %d \n", d);
    }
}

return(0);

}

3 个答案:

答案 0 :(得分:4)

这是典型的缩进问题。

你肯定知道的一件事是你不能为同一个IF提供两个'其他'。如果你按照你的代码,你会看到:

    if (let==s)
    {
            s=x-y;
            printf("x-y is %d \n", s);
    }

    else
    {
             if (let==m)
            {
                    m=x*y;
                    printf("x*y is %d \n", m);
            }

    else
    {
                    d=x/y;
                    printf("x/y is %d \n", d);
    }

这是错误的。

现在已更正的版本

    if (let==s)
    {
            s=x-y;
            printf("x-y is %d \n", s);
    }

    else
    {
             if (let==m)
            {
                    m=x*y;
                    printf("x*y is %d \n", m);
            }

            else //REINDENTED THIS ELSE, AND THE ERROR BECOMES VISIBLE
            {
                    d=x/y;
                    printf("x/y is %d \n", d);
            }

     }//THIS IS THE ONE MISSING

答案 1 :(得分:1)

你有两个} else {块。

只有在未运行} else {if (...) {的情况下才需要执行一个 } else if (...) {块。

例如:

int x = 4;

if (x == 1) {
  // Do stuff
} else if (x == 2) {
  // Do stuff because x isn't 1
} else if (x == 3) {
  // Do stuff because x isn't 1 or 2
} else {
  // Do stuff because x isn't 1, 2 or 3
}

答案 2 :(得分:1)

最后一个else属于

if (let==m)

所以下一个}关闭了之前的其他内容,而main()错过了结束}

通常最好将if / else对缩进到同一级别以避免这些错误