2014-03-07 93 views
0

我只是想让程序取1到9之间的数字并计算半径并显示它。这个程序应该循环,但我得到的是“感谢您使用该软件!”打印功能,它没有经过循环,我似乎无法理解为什么。循环跳过语句

#include <stdio.h> 
int main(void){ 

float i,r, V; 
for(i=0; i <= 4; i++){ 
    while (r != 0) { 
     printf("Enter a radius between 1 and 9: \n"); 
     scanf ("%f", &r); 
     V= (3.141592)*r*r*10; 
     if (r>=1 && r<=9){ 
      printf("The cylinder volume is %f\n", V); 
     } 
     else if (r > 9 || r < 0){ 
      printf ("The input is out of the acceptable range. Select an integer less than $/n"); 
     } 
     printf("Thank you for using the software!\n"); 
    } 
    return 0; 
} 

回答

6

你永远不初始化r输入您while循环之前,所以这是不确定的行为。

此外,你想要使用int s为平等运营商,即==!=。在你的情况下,你可能想包含一个r可以在其中的“错误”。

+0

你是什么意思我不初始化r,我仍然是一个noob,所以我的行话有点慢。 – Levetica

+0

这意味着你永远不会给它赋值,所以它会给你垃圾(无论以前在那个内存位置)。初始化意味着你为它分配一个合法的值,即'r = 1.0;' –

+0

好吧,我明白什么是初始化意味着现在,但如果我不知道用户将输入什么值,我将如何为变量赋值。程序的要点是要求用户输入1到9之间的数字,并将该数字分配给变量r,进行计算,再次将答案重新分配给r,然后显示该数字。在我知道哪些数字可以分配之前,我如何将r分配给一个数字? – Levetica

1

在使用它之前,您还没有初始化r。 你必须初始化它或使用i遍历循环。

INITIALIZE r here before using 
    for (i = 0; i <= 4; i++) 
    { 
     while (r != 0) 
     { 
      //code 
     } 
    } 
+0

他应该在'for'循环中初始化'r',否则它将永远不会再次进入(不是我知道'for'是什么意思。) – ugoren

+0

ofcourse他可以初始化循环中的r但是它会被执行多次,所以它不是一个好主意,我猜想。 –

+0

没有真正知道他想做什么,这是一个徒劳无益的论点。 – ugoren

0

你最好使用do while loop来做你想做的事情。

for(i=0; i <= 4; i++){ 
    do { 
     printf("Enter a radius between 1 and 9: \n"); 
     scanf ("%f", &r); 
     V= (3.141592)*r*r*10; 
     if (r>=1 && r<=9){ 
      printf("The cylinder volume is %f\n", V); 
     } 
     else if (r > 9 || r < 0){ 
      printf ("The input is out of the acceptable range. Select an integer less than $/n"); 
     }while (r != 0) 
     printf("Thank you for using the software!\n"); 
    } 

我还没有尝试过这个由我self.this可能work.try它,如果它的工作。