【问题标题】:Having problem validating the radius in this code在此代码中验证半径时遇到问题
【发布时间】:2020-02-23 08:49:51
【问题描述】:

我有以下代码在尝试验证半径。如果半径为零或负数,我应该给用户无限的机会再次写入半径,直到它有效。当我测试代码时,我写了一个负值并且它工作得很好,它给了我无限的机会,直到我给出一个有效的值,但是如果我从一开始就写了一个正确的值,它会让我再次写这个值,好像它不正确。

#include <iostream>
#include <stdlib.h>
#include "listaEnlazada.h"

using namespace std;
using namespace listaenlazada;

void menu()
{
cout << "\n\t\tLISTA ENLAZADA SIMPLE\n\n";
cout << "1. Insert at begginig " << endl;
cout << "2. Insert at the end " << endl;
cout << "3. Insert in a  specific position " << endl;
cout << "4. Write list " << endl;
cout << "5. Search element " << endl;
cout << "6. Exit " << endl;
}

int main() {
CircPtr cabezaLista = NULL, position;
int op;
string name;
double radius;
double x;
double y;
int pos;

do {
    menu();
    cin >> op;

    switch(op)
    {
        case 1:
        cout << "Write the name of the circle: ";
        cin >> name;
        cout << "\n Write radius: ";
        cin >> radius;
        do{
            cout << "Invalid input. ";
            cin >> radius;
        }while(radius <= 0);
        cout << "\n Write center: ";
        cout << "X: ";
        cin >> x;
        cout << "Y: ";
        cin >> y;
        insertarCabeza(cabezaLista, name, radius, x, y);
        break;

        case 2:
        cout << "Write the name of the circle: ";
        cin >> name;
        cout << "\n  Write radius: ";
        cin >> radius;
        do{
            cout << "Invalid input. ";
            cin >> radius;
        }while(radius <= 0);
        cout << "\n Write center: ";
        cout << "X: ";
        cin >> x;
        cout << "Y: ";
        cin >> y;
        insertarFinal(cabezaLista, name, radius, x, y);
        break;

        case 3:
        cout << "Write the name of the circle: ";
        cin >> name;
        cout << "\n Write radius: ";
        cin >> radius;
        do{
            cout << "Invalid input. ";
            cin >> radius;
        }while (radius <= 0);
        cout << "\n Write center: ";
        cout << "X: ";
        cin >> x;
        cout << "Y: ";
        cin >> y;
        cout << "Position : ";
        cin >> pos;
        posicion = buscarPosicion(cabezaLista, pos-1);
        if (posicion != NULL)
        insertarPosicion(posicion, name, radius, x, y);
        break;
        case 4:
        cout << "\n\n Showing list : ";
        escribirLista(cabezaLista);
        break;
        case 5:
        cout << "\n Center of circle to search: ";
        cout << "X: ";
        cin >> x;
        cout << "Y: ";
        cin >> y;
        buscarElemento(cabezaLista, x, y);
        break;
        case 6:
        cout << "\n End of the program. ";
        break;
    }
    cout << endl;
}while(op != 6);
return 0;
}

【问题讨论】:

    标签: c++ validation


    【解决方案1】:

    只需使用 while 循环而不是 do while 循环。在您的代码中,因为 cin 您正在获取一个输入值,并且对于用户输入的任何值,接下来执行 while 循环而不检查条件,因此您在正确的半径输入上提示输入无效。

    不是这个

        cout << "\n  Write radius: ";
        cin >> radius;
        do{
            cout << "Invalid input. ";
            cin >> radius;
        }while(radius <= 0);
    

    这样做

    cout << "\n  Write radius: ";
        cin >> radius;
        while(radius <= 0){
            cout << "Invalid input. ";
            cin >> radius;
    }
    

    了解循环的基础知识。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-31
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多