do-while循环不记得while中的变量

时间:2013-07-12 05:36:58

标签: c

do{        
            float diameter;

            scanf("%f",&diameter);  
            Printf("Please input diameter");
            if(cheack1(diameter) == 0){
                Printf("Please input a valid number greater than 0");
            }else{
                circle(&area, &perimeter, diameter);
            }

            int cheack = cheack1(diameter);
}while(cheack == 1);

我的do-while循环出现问题。如你所见,我已经宣布了

int cheack = cheack1(diameter); cheack1(diameter);如果我的输入正确则需要解决,如果输入正确则返回1.

但我的错误是:

p7t5.c: In function ‘main’: p7t5.c:87:11: error: ‘cheack’ undeclared (first use in this function) 似乎是while(cheack == 1);不记得do-while循环中的cheack

7 个答案:

答案 0 :(得分:8)

尝试在循环之外声明它,如下所示 - 原因 - 它的范围是块范围。这就是为什么它显示错误。

int cheack;
do{        
            float diameter;

            scanf("%f",&diameter);  
            Printf("Please input diameter");
            if(cheack1(diameter) == 0){
                Printf("Please input a valid number greater than 0");
            }else{
                circle(&area, &perimeter, diameter);
            }

            cheack = cheack1(diameter);
}while(cheack == 1);

答案 1 :(得分:5)

局部变量的范围将被完成,变量将在第一次关闭}括号时被销毁。此变量在堆栈上,并且一旦范围完成就不会保留在内存中。您需要定义{{ 1}}离开循环。

答案 2 :(得分:2)

你在while循环中声明了cheack。因此它在do...while循环中可见,而不在do...while循环之外。 所以在do...while循环之外声明cheack,然后使用它。

int cheack=0;
do{        
        cheack = cheack1(diameter);

   }while(cheack == 1);

答案 3 :(得分:1)

由于您已在cheack循环体内声明了do-while,因此它的范围在该体内。要删除错误,请在进入cheack循环之前声明do-while

答案 4 :(得分:1)

您使用了错误的控制结构,for循环更合适:

for (int cheack = 1; cheack == 1;  cheack = cheack1(diameter)) {
   ...
}

将局部变量放在正确的级别,对读者来说更清晰。

如果您需要在块内进行更新

for (int cheack = 1; cheack == 1;  ) {
   ...
   cheack = cheack1(diameter);
}

(并且编译器可以很好地将其优化为在最后检查条件的表单,但是自己做这样做会过早优化。)

答案 5 :(得分:1)

当然,您不需要cheack变量:

do{        
            float diameter;

            scanf("%f",&diameter);  
            Printf("Please input diameter");
            if(cheack1(diameter) == 0){
                Printf("Please input a valid number greater than 0");
            }else{
                circle(&area, &perimeter, diameter);
            }
}while(cheack1(diameter) == 1);

答案 6 :(得分:0)

do{        
        float diameter;

        scanf("%f",&diameter);  
        Printf("Please input diameter");
        if(cheack1(diameter) == 0){
            Printf("Please input a valid number greater than 0");
        }else{
            circle(&area, &perimeter, diameter);
        }

        int cheack = cheack1(diameter); /*declare this integer before the 'do.while' loop begins*/
} while(cheack == 1);

我把它更改为:

int cheack = cheack1(diameter); /*Now the integer is declared before the do-while loop begins*/

 do{        
        float diameter;

        scanf("%f",&diameter);  
        Printf("Please input diameter");
        if(cheack1(diameter) == 0){
            Printf("Please input a valid number greater than 0");
        }else{
            circle(&area, &perimeter, diameter);
        }


} while(cheack == 1);

但是请确保在调用此循环之前声明了其他变量,否则它们仅存在于循环内部,并且在第一次循环/运行后将消失。