我这个for语句有什么问题吗?错误提示是无法定义i

realworld_549 2020-05-25 02:48:45
求助各位老大哥,我这个情况也不是第一次出现了,非常离谱,求一个大佬来解释一下。
...全文
321 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
5250 2020-05-26
  • 打赏
  • 举报
回复
引用 9 楼 真相重于对错 的回复:
[quote=引用 8 楼 5250 的回复:]
c99不支持for(int i)这种写法,

你多说10年,c89不支持,c99支持[/quote]


是我记错了 谢谢
真相重于对错 2020-05-26
  • 打赏
  • 举报
回复
引用 8 楼 5250 的回复:
c99不支持for(int i)这种写法,
你多说10年,c89不支持,c99支持
5250 2020-05-26
  • 打赏
  • 举报
回复
c99不支持for(int i)这种写法,
真相重于对错 2020-05-26
  • 打赏
  • 举报
回复
引用 6 楼 Arthur169 的回复:
提前声明变量i,在for语句里面声明i=0是C++的方法
瞎说! for 循环 C C 语言 语句 执行循环。 用作 while 循环的简短等价版本。 语法 for ( 初始化子句 ; 条件表达式 ; 迭代表达式 ) 循环语句 解释 表现如下: 初始化子句 可以为表达式或声明 若它是表达式,则在首次求值 条件表达式 前将它求值一次,并舍弃其结果。 (C99)若它是声明,则它在整个循环体内都处于作用域内,包括 初始化子句 的剩余部分、整个条件表达式、整个 迭代表达式 及整个循环语句。声明于此声明的变量只允许有 auto 和 register 存储类。 条件表达式 在循环体前求值。若表达式的结果是零,则循环立即退出。 迭代表达式 在循环体后求值,并舍弃其结果。求值 迭代表达式 后,将控制转移到 条件表达式。 初始化子句 、 条件表达式 和 迭代表达式 都是可选的: for(;;) { printf("endless loop!"); } 循环语句 不是可选的,但它可以是空语句: for(int n = 0; n < 10; ++n, printf("%d\n", n)) ; // 空语句 若需要在某些点终止循环的执行,则可在 循环语句 中的任何位置使用 break 语句。 循环语句 内任何位置使用的 continue 语句会将控制转移到迭代表达式。 若无限循环在其 条件表达式 、 迭代表达式 或 循环语句 的任何部分无可观测行为( I/O 、 volatile 访问、原子或同步操作),则拥有这种循环的程序有未定义行为。这允许编译器优化掉整个不可观测循环,而无需证明他们会结束。仅有的例外是 条件表达式 被忽略或为常量表达式的循环: for(;;) 始终是无限循环。 同所有选择和迭代语句, for 语句建立块作用域:任何于 初始化子句 、 条件表达式 或 迭代表达式 中引入的标识符在 循环语句 后离开作用域。 (C99 起) 关键词 for 注解 用作 循环语句 的表达式语句建立其自身的,异于 初始化子句 作用域的块作用域,不同于 C++ 中: for (int i = 0; ; ) { long i = 1; // C 中合法, C++ 中非法 // ... } 可以用 goto 进入循环体,以此方式进入循环时,不执行 初始化子句 和 条件表达式 。(若控制抵达循环体尾,则可能出现包括执行 条件表达式 的重复。) 示例 运行此代码 #include <stdio.h> #include <stdlib.h> enum { SIZE = 8 }; int main(void) { int array[SIZE]; for(size_t i = 0 ; i < SIZE; ++i) array [i] = rand() % 2; printf("Array filled!\n"); for (size_t i = 0; i < SIZE; ++i) printf("%d ", array[i]); printf("\n"); } 可能的输出: Array filled! 1 0 1 1 1 1 0 0 引用 C11 standard (ISO/IEC 9899:2011): 6.8.5.3 The for statement (p: 151) C99 standard (ISO/IEC 9899:1999): 6.8.5.3 The for statement (p: 136) C89/C90 standard (ISO/IEC 9899:1990): 3.6.5.3 The for statement
「已注销」 2020-05-26
  • 打赏
  • 举报
回复
引用 7 楼 真相重于对错 的回复:
[quote=引用 6 楼 Arthur169 的回复:] 提前声明变量i,在for语句里面声明i=0是C++的方法
瞎说! for 循环 C C 语言 语句 执行循环。 用作 while 循环的简短等价版本。 语法 for ( 初始化子句 ; 条件表达式 ; 迭代表达式 ) 循环语句 解释 表现如下: 初始化子句 可以为表达式或声明 若它是表达式,则在首次求值 条件表达式 前将它求值一次,并舍弃其结果。 (C99)若它是声明,则它在整个循环体内都处于作用域内,包括 初始化子句 的剩余部分、整个条件表达式、整个 迭代表达式 及整个循环语句。声明于此声明的变量只允许有 auto 和 register 存储类。 条件表达式 在循环体前求值。若表达式的结果是零,则循环立即退出。 迭代表达式 在循环体后求值,并舍弃其结果。求值 迭代表达式 后,将控制转移到 条件表达式。 初始化子句 、 条件表达式 和 迭代表达式 都是可选的: for(;;) { printf("endless loop!"); } 循环语句 不是可选的,但它可以是空语句: for(int n = 0; n < 10; ++n, printf("%d\n", n)) ; // 空语句 若需要在某些点终止循环的执行,则可在 循环语句 中的任何位置使用 break 语句。 循环语句 内任何位置使用的 continue 语句会将控制转移到迭代表达式。 若无限循环在其 条件表达式 、 迭代表达式 或 循环语句 的任何部分无可观测行为( I/O 、 volatile 访问、原子或同步操作),则拥有这种循环的程序有未定义行为。这允许编译器优化掉整个不可观测循环,而无需证明他们会结束。仅有的例外是 条件表达式 被忽略或为常量表达式的循环: for(;;) 始终是无限循环。 同所有选择和迭代语句, for 语句建立块作用域:任何于 初始化子句 、 条件表达式 或 迭代表达式 中引入的标识符在 循环语句 后离开作用域。 (C99 起) 关键词 for 注解 用作 循环语句 的表达式语句建立其自身的,异于 初始化子句 作用域的块作用域,不同于 C++ 中: for (int i = 0; ; ) { long i = 1; // C 中合法, C++ 中非法 // ... } 可以用 goto 进入循环体,以此方式进入循环时,不执行 初始化子句 和 条件表达式 。(若控制抵达循环体尾,则可能出现包括执行 条件表达式 的重复。) 示例 运行此代码 #include <stdio.h> #include <stdlib.h> enum { SIZE = 8 }; int main(void) { int array[SIZE]; for(size_t i = 0 ; i < SIZE; ++i) array [i] = rand() % 2; printf("Array filled!\n"); for (size_t i = 0; i < SIZE; ++i) printf("%d ", array[i]); printf("\n"); } 可能的输出: Array filled! 1 0 1 1 1 1 0 0 引用 C11 standard (ISO/IEC 9899:2011): 6.8.5.3 The for statement (p: 151) C99 standard (ISO/IEC 9899:1999): 6.8.5.3 The for statement (p: 136) C89/C90 standard (ISO/IEC 9899:1990): 3.6.5.3 The for statement[/quote]好吧 int i确实C也能用
真相重于对错 2020-05-26
  • 打赏
  • 举报
回复
引用 11 楼 Arthur169 的回复:
[quote=引用 7 楼 真相重于对错 的回复:][quote=引用 6 楼 Arthur169 的回复:] 提前声明变量i,在for语句里面声明i=0是C++的方法
瞎说! for 循环 C C 语言 语句 执行循环。 用作 while 循环的简短等价版本。 语法 for ( 初始化子句 ; 条件表达式 ; 迭代表达式 ) 循环语句 解释 表现如下: 初始化子句 可以为表达式或声明 若它是表达式,则在首次求值 条件表达式 前将它求值一次,并舍弃其结果。 (C99)若它是声明,则它在整个循环体内都处于作用域内,包括 初始化子句 的剩余部分、整个条件表达式、整个 迭代表达式 及整个循环语句。声明于此声明的变量只允许有 auto 和 register 存储类。 条件表达式 在循环体前求值。若表达式的结果是零,则循环立即退出。 迭代表达式 在循环体后求值,并舍弃其结果。求值 迭代表达式 后,将控制转移到 条件表达式。 初始化子句 、 条件表达式 和 迭代表达式 都是可选的: for(;;) { printf("endless loop!"); } 循环语句 不是可选的,但它可以是空语句: for(int n = 0; n < 10; ++n, printf("%d\n", n)) ; // 空语句 若需要在某些点终止循环的执行,则可在 循环语句 中的任何位置使用 break 语句。 循环语句 内任何位置使用的 continue 语句会将控制转移到迭代表达式。 若无限循环在其 条件表达式 、 迭代表达式 或 循环语句 的任何部分无可观测行为( I/O 、 volatile 访问、原子或同步操作),则拥有这种循环的程序有未定义行为。这允许编译器优化掉整个不可观测循环,而无需证明他们会结束。仅有的例外是 条件表达式 被忽略或为常量表达式的循环: for(;;) 始终是无限循环。 同所有选择和迭代语句, for 语句建立块作用域:任何于 初始化子句 、 条件表达式 或 迭代表达式 中引入的标识符在 循环语句 后离开作用域。 (C99 起) 关键词 for 注解 用作 循环语句 的表达式语句建立其自身的,异于 初始化子句 作用域的块作用域,不同于 C++ 中: for (int i = 0; ; ) { long i = 1; // C 中合法, C++ 中非法 // ... } 可以用 goto 进入循环体,以此方式进入循环时,不执行 初始化子句 和 条件表达式 。(若控制抵达循环体尾,则可能出现包括执行 条件表达式 的重复。) 示例 运行此代码 #include <stdio.h> #include <stdlib.h> enum { SIZE = 8 }; int main(void) { int array[SIZE]; for(size_t i = 0 ; i < SIZE; ++i) array [i] = rand() % 2; printf("Array filled!\n"); for (size_t i = 0; i < SIZE; ++i) printf("%d ", array[i]); printf("\n"); } 可能的输出: Array filled! 1 0 1 1 1 1 0 0 引用 C11 standard (ISO/IEC 9899:2011): 6.8.5.3 The for statement (p: 151) C99 standard (ISO/IEC 9899:1999): 6.8.5.3 The for statement (p: 136) C89/C90 standard (ISO/IEC 9899:1990): 3.6.5.3 The for statement[/quote]…… 多说无益 你直接试试提前声明i能过编译不[/quote] 兄弟,貌似我前边贴过图吧,不看就随口而来?
「已注销」 2020-05-26
  • 打赏
  • 举报
回复
引用 7 楼 真相重于对错 的回复:
[quote=引用 6 楼 Arthur169 的回复:] 提前声明变量i,在for语句里面声明i=0是C++的方法
瞎说! for 循环 C C 语言 语句 执行循环。 用作 while 循环的简短等价版本。 语法 for ( 初始化子句 ; 条件表达式 ; 迭代表达式 ) 循环语句 解释 表现如下: 初始化子句 可以为表达式或声明 若它是表达式,则在首次求值 条件表达式 前将它求值一次,并舍弃其结果。 (C99)若它是声明,则它在整个循环体内都处于作用域内,包括 初始化子句 的剩余部分、整个条件表达式、整个 迭代表达式 及整个循环语句。声明于此声明的变量只允许有 auto 和 register 存储类。 条件表达式 在循环体前求值。若表达式的结果是零,则循环立即退出。 迭代表达式 在循环体后求值,并舍弃其结果。求值 迭代表达式 后,将控制转移到 条件表达式。 初始化子句 、 条件表达式 和 迭代表达式 都是可选的: for(;;) { printf("endless loop!"); } 循环语句 不是可选的,但它可以是空语句: for(int n = 0; n < 10; ++n, printf("%d\n", n)) ; // 空语句 若需要在某些点终止循环的执行,则可在 循环语句 中的任何位置使用 break 语句。 循环语句 内任何位置使用的 continue 语句会将控制转移到迭代表达式。 若无限循环在其 条件表达式 、 迭代表达式 或 循环语句 的任何部分无可观测行为( I/O 、 volatile 访问、原子或同步操作),则拥有这种循环的程序有未定义行为。这允许编译器优化掉整个不可观测循环,而无需证明他们会结束。仅有的例外是 条件表达式 被忽略或为常量表达式的循环: for(;;) 始终是无限循环。 同所有选择和迭代语句, for 语句建立块作用域:任何于 初始化子句 、 条件表达式 或 迭代表达式 中引入的标识符在 循环语句 后离开作用域。 (C99 起) 关键词 for 注解 用作 循环语句 的表达式语句建立其自身的,异于 初始化子句 作用域的块作用域,不同于 C++ 中: for (int i = 0; ; ) { long i = 1; // C 中合法, C++ 中非法 // ... } 可以用 goto 进入循环体,以此方式进入循环时,不执行 初始化子句 和 条件表达式 。(若控制抵达循环体尾,则可能出现包括执行 条件表达式 的重复。) 示例 运行此代码 #include <stdio.h> #include <stdlib.h> enum { SIZE = 8 }; int main(void) { int array[SIZE]; for(size_t i = 0 ; i < SIZE; ++i) array [i] = rand() % 2; printf("Array filled!\n"); for (size_t i = 0; i < SIZE; ++i) printf("%d ", array[i]); printf("\n"); } 可能的输出: Array filled! 1 0 1 1 1 1 0 0 引用 C11 standard (ISO/IEC 9899:2011): 6.8.5.3 The for statement (p: 151) C99 standard (ISO/IEC 9899:1999): 6.8.5.3 The for statement (p: 136) C89/C90 standard (ISO/IEC 9899:1990): 3.6.5.3 The for statement[/quote]…… 多说无益 你直接试试提前声明i能过编译不
「已注销」 2020-05-26
  • 打赏
  • 举报
回复
提前声明变量i,在for语句里面声明i=0是C++的方法
chxchxkkk 2020-05-25
  • 打赏
  • 举报
回复
你的编译器支持for(int i=0;)这种写法吗
真相重于对错 2020-05-25
  • 打赏
  • 举报
回复
引用 3 楼 魂灵L 的回复:
你这是c还是c++,c不允许for循环里定义int i吧
c也可以啊,除非是特老的编译器
魂灵L 2020-05-25
  • 打赏
  • 举报
回复
你这是c还是c++,c不允许for循环里定义int i吧
realworld_549 2020-05-25
  • 打赏
  • 举报
回复
还是错。。而且这不是int i的问题吧
轻箬笠 2020-05-25
  • 打赏
  • 举报
回复
int i写了两次。把第9行注释了吧

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧