如何解决错误:预期标识符或'('

时间:2012-12-23 14:12:10

标签: c cs50

我遇到了一些我正在编程的问题。 我一遍又一遍地得到这个错误;

jharvard@appliance (~/Dropbox/pset1): make mario
clang -ggdb3 -O0 -std=c99 -Wall -Werror    mario.c  -lcs50 -lm -o mario
mario.c:23:5: error: expected identifier or '('
    do
    ^
mario.c:32:1: error: expected identifier or '('
do
^
2 errors generated.

我在互联网上搜索但找不到问题.. 去掉;在int main(void)没有帮助之后

这是我的代码:

#include <stdio.h>
#include <cs50.h>
#include <math.h>

int main(void);

    //Ask User for Height, and check

    int a, b, rows, height;
    int a = 0;
    int b = 0;
    int rows = 1;   

    do
    { 
        printf ("Height: ");
        height = GetInt();
    }
    while (height <=0 || height > 23);   

    //build half pyramid

    do
    {
        do
        {
            printf("r");
            a++;
        }
        while (a < height - rows);

        do
        {
            printf("#");
            b++;
        }
        while (b < rows + 1);


        printf("\n");
        rows++;

        while (rows <= height);
    }

我一直试图解决这个问题几天,但我无法理解它!

提前非常感谢你!

8 个答案:

答案 0 :(得分:8)

int main(void);

您刚刚宣布了main。您需要定义它并在该定义中添加代码。

int main()
{
   .....
}

答案 1 :(得分:3)

你有do / while的嵌套循环。确保每个开头都以while结束。

看起来在文件末尾,“while”不正确。

printf("\n");
rows++;

while (rows <= height);
}

那可能是你在'while'之前错过了'}'(行&lt; = height);'

正确的代码可能是:

int main(void)
{

    //Ask User for Height, and check

    int a, b, rows, height;
    a = 0;                    // <- removed int
    b = 0;                    // <- removed int
    rows = 1;                 // <- removed int

    do
    { 
        printf ("Height: ");
        height = GetInt();
    }
    while (height <=0 || height > 23);   

    //build half pyramid

    do
    {
        do
        {
            printf("r");
            a++;
        }
        while (a < height - rows);

        do
        {
            printf("#");
            b++;
        }
        while (b < rows + 1);


        printf("\n");
        rows++;
    }                             // <- add }
    while (rows <= height);
}

答案 2 :(得分:2)

主要帖子被编辑,所以答案很清楚。

你的所有代码都在函数之外,因为你正在使用int main();你宣布一个功能。改为使用{}括号。

int main() {
    //Code here.
}

答案 3 :(得分:2)

int a, b, rows, height;
int a = 0;
int b = 0;

在上面的语句中,ab被多次重新声明,导致编译错误。

答案 4 :(得分:1)

在do scope之外的最后一次:

while (rows <= height);

答案 5 :(得分:1)

如果你没有缩进你的代码,你(通过各种方式)应该这样做,至少在写入循环语句时立即写入起始和结束的大括号任何代码进入该循环的主体(在大括号之间)。它将在未来帮助您避免这些麻烦。

答案 6 :(得分:-1)

兄弟,因为您在int main(void)之后加了分号,所以我去过那里。

//               v
// int main(void);
int main(void)

答案 7 :(得分:-1)

如果反应原生项目......这是一个简单的问题。

您可以在 ios 中转到您的项目目标并检查构建、版本和构建标识符......它们可能在末尾有多余的空间,应该删除

希望有帮助。为我工作