for循环初始声明错误

Ank*_*lon 2 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);
Run Code Online (Sandbox Code Playgroud)

编译器显示

error: 'for' loop initial declarations are only allowed in c99 mode
Run Code Online (Sandbox Code Playgroud)

我不知道这意味着什么,但如果我写这样的代码:

    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);
Run Code Online (Sandbox Code Playgroud)

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

Som*_*ude 5

在循环中声明变量,如

for (int i = 0; ...; ...)
Run Code Online (Sandbox Code Playgroud)

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

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