Столкнулся с совершенно непонятным мне эффектом, работа оператора
if else меняется из-за внесения двух казалось бы ни на что не влияющих переменных
На вход программ подаётся текстовый файл:
7
push 1
push 2
push 3
push 4
push 5
push 6
pop
Вывод осуществляется в консольное окно
По задумке если слово push то на выход должно выводиться число следующее за этим словом, а если pop то слово NO
Вот эта программа (с бесполезной переменной) работает правильно, выводя единственное NO
#include <stdio.h>
int main() {
freopen("input.txt", "r", stdin);
char s[4];
int Q, arr[20];
scanf("%d", &Q);
int j=0; // объявление бесполезной переменной
for(int i=0; i<Q; ++i) {
scanf("%s", s);
if(s[1]=='u') {
scanf("%d", &arr[i]);
printf("%d\n", arr[i]);
++j; // изменение бесполезной переменной
}
else {
printf("NO\n");
}
}
return 0;
}
Вывод такой:
1
2
3
4
5
6
NO
Вот эта программа (с бесполезной переменной в другом блоке) тоже работает правильно, выводя единственное NO
#include <stdio.h>
int main() {
freopen("input.txt", "r", stdin);
char s[4];
int Q, arr[20];
scanf("%d", &Q);
int j=0; // объявление бесполезной переменной
for(int i=0; i<Q; ++i) {
scanf("%s", s);
if(s[1]=='u') {
scanf("%d", &arr[i]);
printf("%d\n", arr[i]);
}
else {
printf("NO\n");
++j; // изменение бесполезной переменной
}
}
return 0;
}
Но если бесполезных, как мне кажется ни на что не влияющих переменных две, по одной в каждом блоке, то программа работает неверно, слово NO выводится вместо одного раза шесть раз
#include <stdio.h>
int main() {
freopen("input.txt", "r", stdin);
char s[4];
int Q, arr[20];
scanf("%d", &Q);
int j=0, k=0; // объявление двух бесполезных переменных
for(int i=0; i<Q; ++i) {
scanf("%s", s);
if(s[1]=='u') {
scanf("%d", &arr[i]);
printf("%d\n", arr[i]);
++j; //изменение первой бесполезной переменной
}
else {
printf("NO\n");
++k; //изменение второй бесполезной переменной
}
}
return 0;
}
Вывод такой:
1
2
3
4
5
6
NO
NO
NO
NO
NO
NO
Каким образом эти две вместе взятые бесполезные переменные меняют работу оператора
if else?