2015-04-18 4 views
-2

У меня есть функция, которая будет поддерживать запрос пользователя на ввод 3 данных, и после ввода данных система предложит пользователю, если они хотят ввести другой набор входных данных, считывая ввод от пользователя, а если это «Y», система снова предложит, если это «N», тогда функция завершится. Но у меня проблема: если пользователь вводит иначе, чем «Y» или «N», система должна распечатать сообщение об ошибке и попросить пользователя снова ввести правильный выбор.C++ Do while loop with if statement issue

Как реализовать его, поскольку я попытался ввести оператор if в цикле do while, но он работает некорректно.

void addstock() 
{ 
char choice; 
char result; 

do 
{ 
    // current date/time based on current system 
    time_t now = time(0); 

    // convert now to string form 
    char* dt = ctime(&now); 
    // convert now to tm struct for UTC 
    tm *gmtm = gmtime(&now); 
    dt = asctime(gmtm); 


    string itemid; 
    string itemdesc; 
    int unitprice; 
    int balstock; 
    string date; 


    //getting input from user 
    cout<<""; 
    getline(cin, itemid); 
    cout<<"  Stock ID   :"; 
    getline(cin, itemid); 

    cout<<"  Description  :"; 
    getline(cin, itemdesc); 

    cout<<"  Price  :"; 
    unitprice = get_Integer(); 

    date = dt; 

    cout<<itemid<<" "<<itemdesc<<" "<<unitprice<<" "<<balstock<<endl; 

    cout <<"Testing time is " <<date<<endl;  
    //storing to array 
    int i = getstockpilesize(); 
    stockpile[i].itemid = itemid; 
    stockpile[i].itemdesc = itemdesc; 
    stockpile[i].unitprice = unitprice; 
    stockpile[i].date = date;  
    writeUserDatabase(); //update stockdatabasefile 
    cout<<"  \E[1;29mStock ID "<<itemid<<" added...\E[0m"<<endl; 
    cout << "Do you want to key in another item (Y/N)" << endl; 
    cin >> choice; 
    result = toupper(choice); 
    cout << "1: " << result <<endl; 

    if (result !='Y' || result !='N') 
    { 
    cout << "Invalid choice, please enter again!" << endl; 
    cin >> choice; 
    choice = topper(choice); 

    } 


    } 
    while(result =='Y'); 
    } 

ответ

0

Обработка ответа Y/N должна быть сделана сама по себе. Ваше решение работает только для одного неправильного ввода - код в if{} никогда не повторяется, даже если вход неверен повторно.

Таким образом, вы должны убедиться, что вход и его обработка повторяется до тех пор, правильный вход не доступен:

do 
{ 
    cin >> choice; 
    result = toupper(choice); 
    cout << "1: " << result <<endl; 

    if (result !='Y' && result !='N') 
    { 
    cout << "Invalid choice, please enter again!" << endl; 
    } 
} 
while (result != 'Y' && result != 'N'); 

Furthemore, ваш, если() утверждение неверно, так как она всегда будет правдой. Я тоже изменил это.

0

Незадолго до окончания if (result !='Y' || result !='N'), если условие, вы должны сказать, по-прежнему, как:

if (result !='Y' && result !='N') { 
     ... 
     continue;//so it asks again user instead of checking condition for just 'Y' 
} 
+0

Самая большая проблема заключается в том, что условие '(result! = 'Y' || result! = 'N')' всегда истинно. –

+0

Я довольно новичок в программировании на С ++. я попытался ввести продолжение; когда система запросит меня, если я хочу ввести другой ввод, я вхожу в «g», он выдает мне сообщение об ошибке и запрашивает ввод, но когда он читает мой следующий ввод, который является «h», он просто выпрыгивает из вызов функции. –

1

Turn что

if (result !='Y' || result !='N') 

в

while (result !='Y' && result !='N') 

и ваша программа будет продолжать спрашивать Пользователь как долго result не является ни «Y», ни «N».