Я пробовал много вещей, и я не могу понять, почему эта программа не остановит код, если вы выберете N, когда она предложит повторить попытку или нет.
Я чувствую, как будто у меня это работало раньше, но я не могу найти код, когда он работал, и я не вижу причин, по которым это не должно работать. Кто-нибудь может помочь?
#include <iostream>
using namespace std;
int main ()
{
char color[10];
char reboot, yes_no;
start:
cout << "What color is the light?\n";
cin >> color;
//if the light is Green
if (!strcmp(color, "green")) {
cout << "The light is Green, you may go ahead and drive thru the intersection.\n";
} else if (!strcmp(color, "Green")) {
cout << "The light is Green, you may go ahead and drive thru the intersection.\n";
//if the light is Yellow
} else if (!strcmp(color, "yellow")) {
cout << "The light is Yellow, safely stop at the intersection, or proceed thru.\n";
} else if (!strcmp(color, "Yellow")) {
cout << "The light is Yellow, safely stop at the intersection, or proceed thru.\n";
//if the light is Red
} else if (!strcmp(color, "red")) {
cout << "The light is Red, you need to stop.\n";
} else if (!strcmp(color, "Red")) {
cout << "The light is Red, you need to stop.\n";
}
//non recognised input
else{
cout << "\nYour input was not recognised...Would you like to restart? (Y/N)\n";
cin >> yes_no;
if(yes_no == 'Y'||'y'){
goto start;
}
}
//restart program
restart:
cout << "\nWould you like to run the program again? (Y/N)\n";
cin >> reboot;
if(reboot == 'Y'||'y'){
goto start;
}
return 0;
}
Ваше состояние не очень хорошее, оно должно быть
if( (reboot == 'Y') || (reboot == 'y') )
{
goto start;
}
Как таковой, он всегда оценивается как истина, так как «у» оценивается как истина и true || anything
всегда дает правду.
То же самое относится и к yes_no
проверять.
РЕДАКТИРОВАТЬ Поскольку у вас возникли проблемы, я создал простую программу для более простого тестирования, и она должна работать как положено:
#include <iostream>
using namespace std;
int main()
{
char yes_no;
while (true)
{
cout << "Enter 'N or 'n' to quit\n";
cin >> yes_no;
if(yes_no == 'N'|| yes_no == 'n')
break;
}
return 0;
}
Эти 2 строки выглядят немного странно
if(yes_no == 'Y'||'y')
if(reboot == 'Y'||'y')
может ты имел ввиду ниже вместо ??
if(yes_no == 'Y' || yes_no == 'y')
if(reboot == 'Y' || reboot == 'y')
Начиная с реальной причины, по которой ваш код не работает — приоритет оператора и ассоциативность:
reboot == 'Y'||'y'
всегда возвращается true
разобрано как (reboot=='Y')||'y'
, Если вы хотите проверить, если reboot
равен одному из двух символов, проверьте это так: reboot=='Y'||reboot=='y'
,
Это должно исправить ваш код. Хотя вот несколько советов:
goto
заявление. Вы можете зациклить свой код, используя циклы (while
, for
или же do while
).C++
использовать std::string
для хранения текста вы можете использовать text=="some Text"
вместо того, чтобы проверить вывод strcmp
,