用这个简单的代码查找错误?

时间:2015-04-17 13:26:00

标签: c scanf

我被困在这些线上一个小时。有人可以帮我查一下代码吗?

#include <stdio.h>
#define NUM 20;
int main(void)
{
  int fckingshit[NUM],i;
  printf("Enter 20 integers now: ");
  for(i=0;i<NUM;i++)
    scanf("%d",&fckingshit[i]);
  return 0;
}

我收到了以下错误消息。

test.c: In function 'main':
test.c:5: error: expected ']' before ';' token
test.c:7: error: 'i' undeclared (first use in this function)
test.c:7: error: (Each undeclared identifier is reported only once
test.c:7: error: for each function it appears in.)
test.c:7: error: expected expression before ';' token
test.c:8: error: 'fckingshit' undeclared (first use in this function)

6 个答案:

答案 0 :(得分:1)

#define NUM 20;错了。它应该是

#define NUM 20

答案 1 :(得分:1)

问题是宏中的;

#include <stdio.h>
#define NUM 20
int main(void)
{
  int fckingshit[NUM];
  int i;
  printf("Enter 20 integers now: ");
  for(i=0;i<NUM;i++)
    scanf("%d",&fckingshit[i]);
  return 0;
}

工作示例:http://ideone.com/0xawxJ

答案 2 :(得分:1)

#define在定义后不需要分号,因为它们不是每个说明的说明。相反,预处理器每次在代码中遇到它时都会替换#define的主体。在您预处理代码后的情况下,它会将#define扩展为int fckingshit[20;],i;,因此编译器会生成错误。

for语句相同,它被翻译为for(i=0;i<20;;i++),这显然是不正确的(分号太多了:)

答案 3 :(得分:1)

正如所有答案所说,错误是宏定义中的分号。

#define NUM 20;

应该是:

#define NUM 20

#define指令是一组名为Preprocessor Directives的指令的一部分。此指令的其他示例包括#include#ifdef等。在编译器将源代码转换为二进制文件之前,预处理器会解释这些指令。 #define就像一个超级强大的“查找和替换”,所以当预处理器处理你的例子时它看起来像这样:

#define NUM 20;
...
  int fckingshit[20;];
...

实际上,预处理器会为您生成以下内容:

...
# 493 "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/stdio.h" 2 3 4
# 2 "test.c" 2

int main(void)
{
  int fckingshit[20;],i;
  printf("Enter 20 integers now: ");
  for(i=0;i<20;;i++)
    scanf("%d",&fckingshit[i]);
  return 0;
}

它要长得多,但我修剪了前200行。当您看到#define NUM 20;消失且您的数组声明现在为fckingshit[20;]时会导致问题。此外,预处理器将#include <stdio.h>扩展为文件的完整路径(以及我修剪的其他200行)。您可以使用以下命令进行尝试:gcc -E [name of your .c file]

建议:不要将愤怒投射到代码中。我有时会发现自己讨厌我正在编写的代码,但是像void i_hate_you(int die, char idiot){...这样的名称并没有帮助你解决问题。事实上,情况正好相反。

祝你好运!

答案 4 :(得分:0)

除去;在#define NUM 20之后;
它应该是#define NUM 20

答案 5 :(得分:-1)

#define没有&#34;;&#34;,这应该可以解决您的问题