首页 > 解决方案 > 在此代码中验证半径时遇到问题

问题描述

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

#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

解决方案


只需使用 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;
}

了解循环的基础知识。


推荐阅读