2015-02-19 5 views
-2

Поскольку я знаю основы Python (3), я решил взять программы, которые я сделал в Python, и набрать их на C++, чтобы получить виджеты C++.C++ While Loop to

Задача: Когда вы вводите имя «TheEnd» для имени, я хочу, чтобы программа закончилась, но по какой-то причине, если вы наберете «TheEnd», она запросит другие поля один раз, а затем закончит. Есть ли способ для пользователя набрать «TheEnd» при запросе имени, и программа заканчивается? (я пытался поставить время цикла в различных областях, но безрезультатно.)

Вот что у меня есть:

#include <iostream> 
#include <string> 

//While loop. 

using namespace std; 

main() 
{ 

    string name; 
    string major; 
    float hours, qualityPoints, GPA; 

    while (name!="TheEnd") //Here's the while loop 

    { 
    cout<<"Please enter your name. "<<endl; 
    cin>>name; 

    cout<<"Please enter your major. "<<endl; 
    cin>>major; 

    cout<<"List the hours you've completed so far. "<<endl; 
    cin>>hours; 

    cout<<"List how many quality points you have. "<<endl; 
    cin>>qualityPoints; 

    GPA = qualityPoints/hours; 

    if (GPA >= 3.4 and hours >= 12) 

    { 

    cout<<name<<endl; 
    cout<<major<<endl; 
    cout<<"You made the Dean's List."<<endl; 
    } 

    else 

    { 

    cout<<"You did not make the Dean's List."<<endl; 

    } 
} 

} 
+0

Да, конечно, есть. Вам просто нужно проверить имя, прежде чем запрашивать другой ввод. – chris

+1

Любопытно, как вы написали программу python? Вам нужно будет проверить имя независимо от python или C++. –

+0

читайте свой код - он делает именно то, что вы написали (всегда верно, но здесь его очень ясно) – pm100

ответ

2

Он спрашивает, потому что ваше состояние проверяется в начале, а затем после запроса все поля.

Наименьшее изменение кода будет следующие изменения:

for(;;) // Former while(name!="TheEnd") 
{ 
    cout<<"Please enter your name. "<<endl; 
    cin>>name; 

    if(name=="TheEnd") 
     break; 

Некоторые пояснения:

Обычно это обычная практика использовать for(;;) вместо while(true), как бесконечный цикл. Причина этого заключается в том, что некоторые компиляторы выдают (ted) предупреждения для постоянных выражений в if/while (например, VS 2005, который широко использовался AFAIK). В большинстве профессиональных проектов предупреждения принимаются как ошибка.

Каждый цикл (для/в то время) может быть завершен с помощью break. Таким образом, у вас нет условия цикла, но условие выхода. Я решил написать это решение, потому что он нуждался в минимальном изменении вашего образца кода. Также нет (легкого) способа сохранить состояние взлома как часть условия while.

Сохраните это время (имя! = «TheEnd») и добавьте только if после того, как cin не является хорошей оценкой. С этим вы создаете код для программирования «культового программирования».

+0

_ «Обычно принято использовать' for (;;) 'вместо' while (true) '' _ Uhm, что? Что для них значительная разница? Пожалуйста, дополните. BTW OP запросил 'while (name! =" TheEnd ")', а не для бесконечного цикла. Проверка результатов 'cin' впоследствии с помощью' do {} while() 'должна хорошо выполнять эту работу. –

+0

@ πάνταῥεῖ Некоторые предупреждения об испускании компилятора (ted) при постоянном выражении в конструкциях if/while (например, VC2005 C4127). BTW 'do {} while()' с проверкой 'cin' заставляет пользователя вводить хотя бы одну целую запись.Чтобы ввести «майор», «точки» и «час» после ввода «TheEnd», не выглядят как хорошая практика. Также в моих ответах я стараюсь как можно меньше изменить данный код. За исключением ОП, прошу об этом. Я продолжу свой ответ. –