c++ - 在此代码中验证半径时遇到问题
问题描述
我有以下代码,我正在尝试验证半径。如果半径为零或负数,我应该给用户无限的机会再次写入半径,直到它有效为止。当我测试代码时,我写了一个负值并且它工作得很好,它给了我无穷无尽的机会,直到我给出一个有效的值,但是如果我从一开始就写了一个正确的值,它会让我再次写这个值,好像它不正确。
#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;
}
解决方案
只需使用 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;
}
了解循环的基础知识。
推荐阅读
- php - 使用 PHP 存储每个访问者的 IP 地址和返回计数
- typescript - Typescript 中的 map 中的 add 函数无法正常工作
- python - 如何从python中的中心点创建坐标网格?
- python - 如何为 Pynguin 设置环境变量 PYNGUIN_DANGER_AWARE?
- python - Python 3 服务器命令更新
- c - 关于 syscall ioctl 和 hostID 操作的问题
- kubernetes - 使用 sudo 提升角色的 kubernetes 的 ansible playbook 找不到 shell 脚本文件位置
- javascript - JS 中的标题提取 - “If”有效,但“Else”无效
- bouncycastle - 充气城堡素性测试
- javascript - 使用序号访问不存在的键时如何转义错误