Ошибка логики C для оператора с разрывом - PullRequest
0 голосов
/ 31 октября 2011

Я запускаю эту программу на C, но вместо ответа «Ответ равен 10», она отправляет обратно сообщение: «Ответ равен 0», даже если оно прерывается в нужное время.

Можете ли выподскажите что не так?


#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{
    int i;
    for(int i = 0; i < 12; i++){
        printf("Checking i = %d\n", i);
        if(i + 90 == i * i) {
            break;
        }
    }
    printf("The answer is %d.\n", i);
}

Ответы [ 5 ]

2 голосов
/ 31 октября 2011

Проблема в том, что у вас есть два i.

int main (int argc, const char * argv[])
{
    int i; //Declares outer i
    for(int i = 0; i < 12; i++) //Declares a NEW i
    {
        printf("Checking i = %d\n", i);
        if(i + 90 == i * i) 
        {
            break;
        }
    }
    printf("The answer is %d.\n", i); //Uses the outer i
}
1 голос
/ 31 октября 2011

Основная путаница в области видимости: у вас есть две разные переменные, называемые i: одна находится во внешней области видимости тела функции main, а другая переопределяет одну внутри цикла for.

Внешняя переменная неинициализирована, поэтому на самом деле у вас неопределенное поведение.

Что вы хотите сказать, это:

int i;
for (i = 0; i < 12; i++)
/*   ^^^^^                    use existing variable! */
{
  printf("Checking i = %d\n", i);
  if (i + 90 == i * i)
  {
    break;
  }
}
0 голосов
/ 31 октября 2011

Поскольку у вас есть две РАЗЛИЧНЫЕ переменные "i" - одна во внутренней области видимости (которую вы увеличиваете с 0..11), и одна во внешней области видимости.Вы печатаете один во внешней области видимости.

РЕШЕНИЕ:

изменить "для (int i = ...)" на "для (i = ...)"

0 голосов
/ 31 октября 2011
for(int i = 0; i < 12; i++){

Вы создаете еще один i здесь, что скрывает i за пределами области действия for.

Измените на:

int i;
...
for (i = 0; i < 12; i++){
0 голосов
/ 31 октября 2011

Может ли это быть дополнительный "int"?Вы объявляете другой экземпляр i в цикле for, который выходит из области видимости при выходе из цикла.

...