for循环初始声明错误

时间:2013-10-20 14:21:36

标签: c

在我的代码中,我无法初始化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);

它工作正常。 为什么会这样?

3 个答案:

答案 0 :(得分:5)

在循环中声明变量,如

for (int i = 0; ...; ...)

是C99标准中的新功能,并且在早期标准中不允许使用。错误消息告诉您的是,您的编译器已设置为使用早期标准进行编译,因此您无法在for语句中使用声明。

您必须从for语句中删除声明,或者告诉编译器在编译时使用更高版本的标准。如果你有GCC或clang,可以通过添加标志-std=c99来告诉编译器使用更高版本。

答案 1 :(得分:2)

您正在使用仅支持C89的编译器,或者编译器仅处于支持C89的模式。变量的声明必须在C89的块的开头。它不再是C99或C ++中的限制。

更改为C99模式或将ijk的声明放在块的开头。初始化它们的方式看起来不正确,您只需初始化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开关。