c - 我可以在 do-while 语句的主体中声明 C 中的变量吗?
问题描述
我刚刚开始我的编码之旅,我一直在使用 cs50 的 IDE。每次我在 do 函数的主体中声明一个整数时,当我尝试在 while 函数的主体中使用相同的整数时,使用未声明的标识符会出错,这是不允许的吗?如果是,为什么会这样?
这是供参考的代码 -
do{
int n = get_int("Height: ");
}
while(n < 1 || n > 8);
解决方案
do-while 语句的主体(子语句)形成一个块作用域。在此块范围内声明的所有内容的生命周期都受块边界的限制(如果没有存储说明符 static)。但无论如何,这样的声明在块外是不可见的。所以在这个do while循环中声明的变量n
do{
int n = get_int("Height: ");
}
while(n < 1 || n > 8);
在循环的主体(子语句)之外不存在。
您必须在循环之前声明变量,例如
int n = 0;
do{
n = get_int("Height: ");
} while(n < 1 || n > 8);
根据 C 标准(6.8.5 迭代语句),do-while 语句的定义如下
do statement while ( expression ) ;
和
5 迭代语句是一个块,其范围是其封闭块范围的严格子集。循环体也是一个块,其范围是迭代语句范围的严格子集。
推荐阅读
- python - Python函数定义变量失败
- flutter - Flutter如何通过平台视图将触摸事件传递给另一个
- hadoop - 如何从 Ambari 为 Hadoop 中的 Namenode 和 Datanode 启用 JMX 端口
- java - Spring 中的 @Scheduled 注解
- swift - 集合视图控制器不会使单元格出列 - SWIFT
- python - 在 tensorflow2.0 中使用稀疏矩阵作为输入遇到异常“应定义 `Dense` 的输入的最后一个维度。找到 `None`。”
- c++ - 在点云库 (PCL) 中使用自定义点类型的问题
- express - 如何在 expressjs 中使用 connect-mongo 处理所有错误
- javascript - moment().isBefore 不能正常工作?
- java - 带有 http 请求的客户端程序响应