以下是运行时错误:
@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;
}
我该如何解决这个问题?
答案 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并对其进行评估。您可以将声明移到顶部,也可以告诉编译器您遵循以后的标准。