在我的代码中,我无法初始化for循环初始化部分中的变量。 当我写这段代码时:
long unsigned int arr[3][3];
char str[50];
for(;gets(str);)
{
int temp=0;
for(int i,j,k=0; str[k]!='\0'; k++){ if(str[k]!=' ')temp=temp*10+(str[k]-48);
编译器显示
error: 'for' loop initial declarations are only allowed in c99 mode
我不知道这意味着什么, 但如果我像这样编写代码:
long unsigned int arr[3][3];
char str[50];
for(;gets(str);)
{
int temp=0;
int i,j,k=0;
for(; str[k]!='\0'; k++){ if(str[k]!=' ')temp=temp*10+(str[k]-48);
它工作正常。 为什么会这样?
答案 0 :(得分:5)
在循环中声明变量,如
for (int i = 0; ...; ...)
是C99标准中的新功能,并且在早期标准中不允许使用。错误消息告诉您的是,您的编译器已设置为使用早期标准进行编译,因此您无法在for
语句中使用声明。
您必须从for
语句中删除声明,或者告诉编译器在编译时使用更高版本的标准。如果你有GCC或clang,可以通过添加标志-std=c99
来告诉编译器使用更高版本。
答案 1 :(得分:2)
您正在使用仅支持C89的编译器,或者编译器仅处于支持C89的模式。变量的声明必须在C89的块的开头。它不再是C99或C ++中的限制。
更改为C99模式或将i
,j
,k
的声明放在块的开头。初始化它们的方式看起来不正确,您只需初始化k
。
for(;gets(str);)
{
int temp=0;
int i,j,k;
for(i=0,j=0,k=0; str[k]!='\0'; k++){ if(str[k]!=' ')temp=temp*10+(str[k]-48);
不要使用gets
,这很危险,请改用fgets
。
答案 2 :(得分:1)
这是因为您以前的代码不符合编译代码的C标准。检查C(或C ++)编译器的手册如何打开(如果可能)C99标准下的编译。对于GNU编译器,它是-std=c99
开关。