2013-07-12 2 views
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. Как вы можете видеть, я уже объявил, что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); не помня cheack внутри сделай время цикла.

+9

в то время состояние не входить {} scope, не sub scope. – lulyon

ответ

8

Попробуйте объявить его за пределами цикла, как это - REASON- его область охвата. То почему его показывающ ошибку.

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

Поскольку вы объявили cheack внутри тела do-while петля, это область действия внутри самого тела. Чтобы удалить ошибку, объявите cheack перед входом в цикл do-while.

5

Объем локальной переменной будет закончена, и переменная будет разрушена при первом закрытии } переменная bracket.This находится на стеке и не будет оставаться в памяти, как только сфера будет finished.You необходимо определить cheack из петли ,

2

Вы объявили cheack внутри сделать в то время как loop.So она видна в do...while цикла, а не за пределами do...while цикла. Так объявите cheack вне do...while цикл, а затем используйте его.

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

    }while(cheack == 1); 
1

Вы используете неправильную структуру управления, for цикл будет более подходящим:

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

имеет локальную переменную на нужном уровне и гораздо понятнее читателю.

Если требуется обновление внутри блока сделать

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

(И компилятор может очень хорошо оптимизировать, что формы с проверкой условия в самом конце, но делать это самостоятельно, было бы преждевременно оптимизация)

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); 
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); 

Но будьте уверены, что ваши другие переменные были объявлены перед вызовом этого цикла в противном случае они существуют только внутри цикла и пропадут после первого контура/запуска.

Смежные вопросы