#include <iostream>
#include <math.h>
#include <string.h>
using namespace std;
int main ()
{
cout << "My Funny Program";
do {
string Answer;
cout << "Are you stupid? (Yes/No)";
cin >> Answer;
cout << endl;
cout << "Perhaps you are lying?";
}
while (Answer == "No");
cout << "Thank you for your honesty." << endl;
return 0;
}
Я пытался заставить этот код работать; однако, каждый раз, когда появляется сообщение об ошибке "Ответ не был объявлен в этой области".
Я считаю, что условие while
находится за пределами области действия, если сам блок. Поэтому string Answer
должна быть определена вне цикла.
Рекомендация стиля. Шапки используются для классов или констант или макросов. Избегайте использования их для переменных.
do {
string Answer;
cout << "Are you stupid? (Yes/No)";
cin >> Answer;
cout << endl;
cout << "Perhaps you are lying?";
}
while (Answer == "No");
В do
вы объявили переменную строку Answer
. Затем Answer
был вставлен в стек, однако, когда процедура закроется }
, переменная будет всплывать, что означает, что в выражении while
Answer
был освобожден, а компилятор рассматривает Answer
как неопределенную переменную.
В настоящее время ваша переменная Answer
находится только в области видимости между {}
где она объявлена (внутри тела цикла). Вам нужно объявить Answer
перед циклом.
string Answer;
do {
cout << "Are you stupid? (Yes/No)";
cin >> Answer;
cout << endl;
cout << "Perhaps you are lying?";
}
while (Answer == "No");
Интересная программа...
Объявление ответа вне цикла do-while будет решать вашу проблему.
string Answer;
do {
cout << "Are you stupid? (Yes/No)";
cin >> Answer;
cout << endl;
cout << "Perhaps you are lying?";
}
while (Answer == "No");
Также вы должны использовать <string>
вместо <string.h>
do{
string Answer;
cout<< "Are you stupid? (Yes/No)";
cin>>Answer;
cout<< endl;
cout<< "Perhaps you are lying?";
}
while (Answer == "No");
Поскольку ответ объявляется внутри do-while, часть while не имеет представления о существовании ответа.
Вы должны объявить ответ перед выполнением