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
。
答案 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);
但是请确保在调用此循环之前声明了其他变量,否则它们仅存在于循环内部,并且在第一次循环/运行后将消失。