我的for循环中出现了错误,我想知道为什么:
for (int i = 0; char a = 'a'; i < n; i++; a++)
substitution.c:24:25: error: expected expression
for (int i = 0; char a = 'a'; i < n; i++; a++)
^
substitution.c:24:44: error: expected ')'
for (int i = 0; char a = 'a'; i < n; i++; a++)
^
substitution.c:24:13: note: to match this '('
for (int i = 0; char a = 'a'; i < n; i++; a++)
^
substitution.c:24:46: error: use of undeclared identifier 'i'
for (int i = 0; char a = 'a'; i < n; i++; a++)
^
substitution.c:24:51: error: use of undeclared identifier 'a'
for (int i = 0; char a = 'a'; i < n; i++; a++)编辑:
when i use for (int i = 0, char a = 'a'; i < n; i++, a++)
i get:
substitution.c:24:25: error: expected identifier or '('
for (int i = 0, char a = 'a'; i < n; i++, a++)
^
substitution.c:24:25: error: expected ';' in 'for' statement specifier
substitution.c:24:25: error: expected expression
substitution.c:24:44: error: expected ')'
for (int i = 0, char a = 'a'; i < n; i++, a++)
^
substitution.c:24:13: note: to match this '('
for (int i = 0, char a = 'a'; i < n; i++, a++)
^
substitution.c:24:46: error: use of undeclared identifier 'i'
for (int i = 0, char a = 'a'; i < n; i++, a++)
^
substitution.c:24:51: error: use of undeclared identifier 'a'
for (int i = 0, char a = 'a'; i < n; i++, a++)
^发布于 2020-05-23 19:26:07
来自C11 Standards#6.8.5.3 ( for语句)
1语句
for ( clause-1 ; expression-2 ; expression-3 ) statement的行为如下:表达式-2是在循环体每次执行之前计算的控制表达式。表达式表达式-3在循环体每次执行后被计算为一个空表达式。如果子句-1是一个声明,则它声明的任何标识符的范围是声明的其余部分和整个循环,包括其他两个表达式;它是在对控制表达式进行第一次计算之前按执行顺序到达的。如果子句-1是表达式,则在对控制表达式进行第一次计算之前,将其计算为一个空表达式。
脚注
因此,子句-1指定循环的初始化,可能声明一个或多个变量在循环中使用;控制表达式-2指定在每次迭代之前进行的计算,以便循环的执行一直持续到表达式比较等于0;表达式-3指定在每次迭代之后执行的操作(例如递增)。
也来自C11 Standards#6.7 (声明)
declaration: declaration-specifiers init-declarator-listopt ;
注意声明末尾的;。
clause-1可以是声明语句或表达式。如果clause-1是一个声明,则可以声明一个或多个相同类型的变量,因为声明以;结尾。所以,你可以-
for (int i = 0, j = 0; expression-2 ; expression-3 ) statementexpression-2和expression-3是表达式,可以使用任何有效的表达式来代替它们。
如果在for循环中使用不同类型的多个变量,则可以在clause-1中初始化它们,条件是它们应该在循环之前声明:
char a;
int i;
for (i = 0, a = 'a'; i < n; i++, a++)当然,你也可以
char a = 'a';
int i = 0;
for (; i < n; i++, a++)发布于 2020-05-23 18:41:27
在for循环的第一部分中,只能有一个声明子句(声明一个或多个类型的变量)。这些变量中至少有一个必须在循环之外声明。
char a = 'a';
for (int i = 0; i < n; i++; a++)发布于 2020-05-23 19:03:02
形式上,for循环如下所示:
for (expression; expression; expression) statement或
for (declaration; expression; expression) statement通常,它是这样使用的:
for(init; condition; increment) statement您可以在init中声明多个变量,但它们必须是相同类型的。解决办法是声明一个结构。这里有一个概念的证明:
$ cat k.c
#include <stdio.h>
int main()
{
for(struct {
int a; char b; double c; } s =
{ .a = 0, .b = 'a', .c = 1.3 };
s.a < 10;
s.a++
)
{
s.b+=2;
s.c+=3;
printf("%d %c %f\n", s.a, s.b, s.c);
}
}
$ gcc k.c -Wall -Wextra -std=c11 -pedantic
$ ./a.out
0 c 4.300000
1 e 7.300000
2 g 10.300000
3 i 13.300000
4 k 16.300000
5 m 19.300000
6 o 22.300000
7 q 25.300000
8 s 28.300000
9 u 31.300000IMHO,上面的是过份的和不太可读的。如果您非常希望其他变量在for循环中是本地变量,则可以将其封装在括号中以创建如下范围:
{ // Starting bracket
// Declare variables
for(;;) {
}} // End both for loop and previous scope示例:
#include <stdio.h>
int main()
{
{ char b = 'a';
double c = 1.3;
for(int a=0; a<10; a++)
{
b+=2;
c+=3;
printf("%d %c %f\n", a, b, c);
}}
}https://stackoverflow.com/questions/61976852
复制相似问题