输入结束时的预期声明或声明

时间:2014-07-06 18:04:35

标签: c brackets

我在C语言中有以下代码:

#include <stdio.h>
#define NOERROR 0

int c;
int parentheses, brackets, braces;

void checkErrors(void);

int main()
{
    extern int parentheses, brackets, braces;
    extern int c;

    parentheses=0; brackets=0; braces=0;

    while ((c = getchar()) != EOF){
        if (c == '(')
            {++parentheses;}
        else if (c == ')')
            {--parentheses;}
        else if (c == '[')
            {++brackets;}
        else if (c == ']')
            {--brackets;}
        else if (c == '{')
            {++braces;}
        else if (c == '}')
            {--braces;}
    checkErrors();
}

void checkErrors(void)
{   
    extern int parentheses, brackets, braces;
    extern int c;

    if (parentheses != NOERROR){
        printf("You have missed some parentheses"); 
        }

    if (brackets != NOERROR){
        printf("You have missed some brackets");
        }

    if (braces != NOERROR){
        printf("You have missed some braces");
        }
}

我收到此错误:第55行输入结束时的预期声明或声明(主函数结束时)为什么会发生这种情况?我没有错过任何括号。

由于

3 个答案:

答案 0 :(得分:2)

while之后的声明无效。在其他之前,如果有

while ((c = getchar()) != EOF){
    else if (c == '(')

while语句也应该有结束括号。

在这些陈述后放置括号

      else if (c == '}')
            {--braces;}
   } // <== 

答案 1 :(得分:1)

你从未关闭main()中的while循环。

答案 2 :(得分:0)

虽然}未关闭循环。 使用好的编辑器。

使用Switch case,因为它在很多条件下更具可读性。

while ((c = getchar()) != EOF){
switch (c)
      {
                case '(':
                    ++parentheses;
                    break;
                case ')':
                    --parentheses;
                    break;
                case '[':
                    ++brackets;
                    break;
                case ']':
                    --brackets;
                    break;
                case '{':
                    ++braces;
                    break;
                case '}':
                    --braces;
                    break;
      }
}