1
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);是不记得cheackdo-while 循环的内部。

4

7 回答 7

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);
于 2013-07-12T05:40:22.770 回答
5

局部变量的作用域将结束,变量将在第一个}右括号时被销毁。这个变量在堆栈上,一旦作用域结束就不会留在内存中。你需要cheack在循环外定义。

于 2013-07-12T05:40:00.680 回答
2

您已经cheack在 do while 循环中声明。因此它在do...while循环内可见,而不是在do...while循环外。所以在循环外声明检查do...while然后使用它。

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

   }while(cheack == 1);
于 2013-07-12T05:42:31.167 回答
1

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

于 2013-07-12T05:39:45.650 回答
1

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

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

具有正确级别的局部变量,并且对读者来说更清楚。

如果您需要块内的更新,请执行

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

(并且编译器很可能会在最后通过检查条件将其优化为一种形式,但自己这样做将是过早的优化。)

于 2013-07-12T06:22:22.753 回答
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);
于 2013-07-12T09:05:18.767 回答
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);

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

于 2013-10-03T09:02:35.937 回答