首页 > 解决方案 > 我可以在 do-while 语句的主体中声明 C 中的变量吗?

问题描述

我刚刚开始我的编码之旅,我一直在使用 cs50 的 IDE。每次我在 do 函数的主体中声明一个整数时,当我尝试在 while 函数的主体中使用相同的整数时,使用未声明的标识符会出错,这是不允许的吗?如果是,为什么会这样?

这是供参考的代码 -

do{

   int n = get_int("Height: ");

  }

while(n < 1 || n > 8);

标签: cscopedeclarationdo-whilecs50

解决方案


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 迭代语句是一个块,其范围是其封闭块范围的严格子集。循环体也是一个块,其范围是迭代语句范围的严格子集。


推荐阅读