Есть ли способ остановить повторение цикла более одного раза при запуске - PullRequest
0 голосов
/ 07 июля 2019

Я хочу построить простую анкету. Когда я запускаю код, он повторяет оператор дважды, когда я хочу, чтобы он выполнялся только один раз и не повторял операторы cout. Это происходит только тогда, когда я использую строки, а не символы. Извините за неуклюжее письмо. [Введите описание изображения здесь] [1]

Код ниже:


#include<iostream>
#include<string>
using namespace std;

bool N='n';
bool Y='y';
bool YES="yes";
bool NO="no";
int main(){
    char response, response2, response3;
    string response_1, response_2, response_3;


    cout<<"Hello would you like to answer a few questions?"<<endl<<"Please input y or n"<<endl;
    cin>>response;
    {  do{

        if((response_1=="yes")||(response=='y')){
        cout<<"please continue:"<<endl;
        break;}
    else if((response_1=="no")||(response=='n')){
        cout<<"Please exit the program then:"<<endl;
        }
    else{
        cout<<"Wrong input";

    }
}
    while((response_1!="yes")||(response!='y'));
}

    { do{
    cout<<"Question one"<<endl<<"Can birds sing?.....";/*This statement repeats more than once.*/
    cin>>response2;
    if((response_2=="yes")||(response2=='y')){
        cout<<"Correct they do sing"<<endl;
        break;
    }
    else if((response_2=="no")||(response2=='n')){
        cout<<"Do you want to try again?"<<endl;
    }
    else{

}
}
    while((response_2!="yes")||(response2!='y'));
}

  { do{
    cout<<"Question two now"<<endl<<"Are pigs smart?......"<<endl;/*This on also repeats moer than once*/
    cin>>response3;
    if((response_3=="yes")||(response3=='y')){
        cout<<"Yes they are smart"<<endl;
        break;
    }
    else if((response_3=="no")||(response3=='n')){
        cout<<"Do you want to try again?"<<endl;
    }
    else{

    }

}
    while((response_3!="yes")||(response3!='y'));
}

    return 0;
}

[1]: https://i.stack.imgur.com/bTnBY.jpg

Ответы [ 2 ]

1 голос
/ 07 июля 2019

Вы можете добавить переменную, которая будет подсчитывать, сколько раз цикл повторяется

int loopCount = 0;
int LoopMaxTries = 1;

while ( loopCount < LoopMaxTries /* and possibly other stuff */ ) {

    // at the end of the loop
    loopCount++;
}
1 голос
/ 07 июля 2019

Вы объявляете response как символ, но в первый раз, когда вы пытаетесь инициализировать его с консоли

cin>>response;

ваш ввод содержит 3 символа («да» в третьей строке вашего примера [1]), поэтому response получает «y», но «e» и «s» также находятся во входном потоке, поэтому причина, по которой во время следующего чтения с консоли:

cin>>response2;

response2 инициализируется с 'e', ​​что вызывает печать дополнительных Can birds sing?.....Question one, после чего 'response2' получает 's' и печатает дополнительную строку снова.

Я рекомендую вам удалить все избыточные переменные и использовать только std :: string response. Тогда будет сложнее ошибиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...