почему я должен добавлять новую переменную в этот код

#c

#c

Вопрос:

Я пытался написать код, который принимает два числа в качестве входных данных и преобразует числа в слова по определенным правилам.

Ниже приведен код, который я написал сначала, но какой бы ввод я ни вводил, цикл начинается с x = 0 .

 #include <iostream>

int main() {

    string nums[10] = {"zero","one","two","three","four","five","six","seven","eight","nine"};

    int x,y;
    cin >> x;
    cin >> y;

    for (int x = x; x <= y; x  ){
        if (x <= 9){
            cout << nums[x] << "n";
        }
        else if (x % 2 == 0){
            cout << "even" << "n";
        }
        else {
            cout << "odd" <<"n";
        }
    }
    return 0;
}
  

Ниже приведен второй код, который я написал, и он работал так, как я хотел.

 #include <iostream>

int main() {

    string nums[10] = {"zero","one","two","three","four","five","six","seven","eight","nine"};

    int x,y;
    cin >> x;
    cin >> y;

    for (int i = x; i <= y; i  ){
        if (i <= 9){
            cout << nums[i] << "n";
        }
        else if (i % 2 == 0){
            cout << "even" << "n";
        }
        else {
            cout << "odd" <<"n";
        }
    }
    return 0;
}
  

Я обнаружил, что если я добавляю переменную, она тоже работает так, как я хотел. Я нашел решение, но я не знаю, почему я должен добавлять переменную и почему первая всегда начинается с x = 0.

Комментарии:

1.Оба раза вы определяете новую переменную. Но в первом коде новая переменная также имеет имя x и «скрывает» другую x вне for цикла., С которого она начинается, 0 просто случайно, int x = x; инициализирует ее тем, что оказывается в неинициализированном int x .

2. Вам не нужна другая x . Попробуйте for (; x <= y; x ){

Ответ №1:

В первом примере, который вы предоставили, вы определили локальную переменную (x) с тем же именем во внешнем блоке:

   for (int x = x; x <= y; x  )
  

На самом деле здесь происходит затенение переменной, и c скрывает объявление переменной внешнего блока с тем же именем во вложенном блоке.