c - 为什么我不能在 for 循环的初始语句中声明多个变量?
问题描述
当使用带有一个变量的 a 时,我们将其声明为 0,因为 i=0 就像这里一样
但是当我们使用两个变量时,就好像我添加 n = strlen 以使代码更高效时,不声明 i=0 而是使用逗号并声明 n=strlen(s) 。为什么我们不能使用 'i=0;' 在这里就像在前面的代码中所做的那样?
编辑:cs50.h 是沙盒 cs50 的一部分,由哈佛制造。
#include <stdio.h>
#include <string.h>
int main(void)
{
string s = get_string("Input: ");
printf("Output: ");
for (int i = 0; i < strlen(s); i++)
{
printf("%c\n", s[i]);
}
}
#include <cs50.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
string s = get_string("Input: ");
printf("Output:\n");
for (int i = 0, n = strlen(s); i < n; i++)
{
printf("%c\n", s[i]);
}
}
解决方案
从 C 标准ISO/IEC 9899:TC3 / ISO/IEC 9899/C11for
中,语句的语法描述§(6.8.5) 迭代语句有 2 种不同的形式:
for ( expression_opt ; expression_opt ; expression_opt ) statement
for (declaration expression_opt ; expression_opt ) statement
请注意,在第一个表单中,我们在第一个位置有一个表达式,尽管它是可选的,因为所有 3 个字段,并且语句表单的所有 3 个部分都由;
用作分隔符的分号分隔。
在第二种形式中,我们可以看到括号中的第一个元素是声明而不是表达式,我们还可以注意到没有分号分隔它。这是因为声明本身总是以分号结尾。
第(6.7) 段声明描述了声明的语法:
declaration-specifiers init-declarator-list_opt ;
如您所见, adeclaration
始终以分号结尾。
一个声明当然可以采用多个声明的形式,如下所示:
for (int i = 0, n = strlen(s); i < n; i++)
{
printf("%c\n", s[i]);
}
因此,您使用的是分号分隔声明的第二种形式(不是 的第一部分for
)。
使用多个分号只是语法错误。
推荐阅读
- z3 - 有人可以帮助在 SMT 求解器 Z3 中对这个函数(多项式函数)进行建模吗?
- flutter - 检查是否连接到 WiFi(即使没有互联网)或移动数据
- git - VS2019:推送到远程存储库时遇到错误:Git 失败并出现致命错误。无法访问
- javascript - 如何获取上一页点击按钮的值
- reactjs - React TypeScript:如何将多个文件设置为状态?
- node.js - 在浏览器中与在 Node 应用程序上使用 JSRender 的“空传播运算符”之间的区别
- javascript - 异步消息还是(消息)?- 不和谐.js
- .net-core - Blazor 未接收在服务器端创建的信号器
- java - SpringBoot Admin 中的 Hazelcast 通过 Docker Swarm 运行 2 个实例
- solr - 将两个或多个字段复制到 Solr 中的一个字段中