意外令牌附近的语法错误`('-------我的程序编译得很好,但无法运行

时间:2014-04-03 10:34:49

标签: c

以下是运行时错误:

    @user:~/workspace$ gcc compute.c
    compute.c: In function ‘main’:
    compute.c:59:1: error: ‘for’ loop initial declarations are only allowed in C99 mode
     for(int i=0;i<5;i++){
     ^
    compute.c:59:1: note: use option -std=c99 or -std=gnu99 to compile your code
     user:~/workspace$ gcc compute.c -std=c99
l    user:~/workspace$ ./compute.c
    ./compute.c: line 3: syntax error near unexpected token `('
    ./compute.c: line 3: `int main()'

我不知道如何修复它。我认为我的代码没问题。

当我编译它时,它是完美的,但它在我运行它时不起作用。

这是我的代码:

#include<stdio.h>

int main()
{
  typedef struct{
    float real;
    float virtual;
  }component;

  component construtor(int real, int virtual) {
    component c;
    c.real=real;
    c.virtual=virtual;
    return c;
  }

  component add(component c1, component c2){
     component new;
     new.real=c1.real+c2.real;
     new.virtual=c1.virtual+c2.virtual;
     return new;
  }

  component minus(component c1, component c2){
    component new;
    new.real=c1.real-c2.real;
    new.virtual=c1.virtual-c2.virtual;
    return new;
  }

  component multiply(component c1, component c2){
    component new;
    new.real=c1.real*c2.real-c1.virtual*c2.virtual;
    new.virtual=c1.real*c2.virtual+c1.virtual*c2.real;
    return new;
   }

  float real(component c){
    return c.real;
  }

  float virtual(component c){
    return c.virtual;
  }

   component division(component c1, component c2){
    component new;
    new.real =     (c1.real*c2.real+c1.virtual*c2.virtual)/(c2.real*c2.real+c2.virtual*c2.virtual);
new.virtual = (c1.virtual*c2.real-c1.real*c2.virtual)/(c2.real*c2.real+c2.virtual*c2.virtual);
    return new;
   }

  component conjugate(component c){
    c.virtual=(-1)*c.virtual;
    return c;
}

component test_data[5];
for(int i=0;i<5;i++){
  scanf("enter the real part: %f\n",&test_data[i].real);
  scanf("enter the virtual part: %f\n",&test_data[i].virtual);
 }

  component add_result=add(test_data[0],test_data[1]);
  component minus_result=minus(test_data[2],test_data[3]);
  component multiply_result=multiply(test_data[4],test_data[5]);
  component division_result=division(test_data[6],test_data[7]);
  component conjugate_result=conjugate(test_data[8]);

  printf("Add two components: %f+%f i",real(add_result),virtual(add_result));
  printf("Minus two components: %f+%f i", real(minus_result),virtual(minus_result));
  printf("Multiply two components: %f+%f i",     real(multiply_result),virtual(multiply_result));
  printf("Division two components: %f+%f i",     real(division_result),virtual(division_result));
  printf("Conjugate of a components: %f+%f i",   real(conjugate_result),virtual(conjugate_result));

  return 0;
}

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

您使用的编译器不支持for循环中的声明,或者您缺少一个开关:

for(int i=0;i<5;i++){

这样做:

int i;
for(i=0;i<5;i++){ //....

根据您的评论,您无法运行 .c文件,您必须首先编译它,我认为您正在获取语法错。

执行此操作gcc -Wall yourFile.c -o yourFile -std=C99进行编译(或者更简单地说,make yourFile)。然后,您可以./ex1运行该程序。

答案 1 :(得分:1)

默认情况下,如果没有传递任何选项,GCC会将 gnu90 (C90 + GNU扩展名)视为C标准; C90不允许在函数中间使用变量声明(在int内声明for也是此变体);所有声明都应在其他声明之前。但是,使用C99标准更改了此规则,并且可以在函数中的任何位置进行C ++声明(除了一些例外)。

由于您没有指定它的C99或C11,编译器会回退到C90并对其进行评估。您可以将声明移到顶部,也可以告诉编译器您遵循以后的标准。