#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 скрывает объявление переменной внешнего блока с тем же именем во вложенном блоке.