C++ 带循环的字符串的输入验证

C++ Input validation for strings with loop

本文关键字:输入 验证 字符串 C++ 循环      更新时间:2023-10-16

我正在尝试制作一个程序,其中用户输入一个数字和一个字母,表示他们使用的测量单位(例如英寸=i,英尺=f等),然后输入的字母用于一系列if语句,以查看哪个函数将数字转换为多少米。我为度量单位(用作字符串变量)添加了输入验证。我的问题是,当我输入我想使用的字母时,即使输入正确,程序也会认为我输入的内容无效。我删除了输入验证,还注意到字符串甚至没有经过任何 if 语句。代码是这样的,#include 包含:

#include <iostream>
#include <string>
using namespace std;
float inTOmeters(float);
float ftTOmeters(float);
float cmTOmeters(float);
float yTOmeters(float);
int main{
    float measurement, measurement;
    string unit;
    cout<<"Enter the number you want to be measured"<<endl;
    cin>>measure;
    cout<<"Now enter the unit of measurement you want to use"<<endl;
    cout<<"i=inches, f=feet, c=centimeters, y=yards, m=meters"<<endl;
    cin<<unit;
    while(unit !="i"||unit !="m"||unit !="c"||unit !="y"||unit !="f"){
        cout<<"Invalid input pick from I, m, c, y, or f"<<endl;
        cin>>unit;
    }
    if(unit=="i"){
        measurementm=inTOmeters(measurement);
    }
    if(unit=="c"){
        measurementm=cmTOmeters(measurement);
    }
    if(unit=="f"){
        measurementm=ftTOmeters(measurement);
    }
    if(unit=="y"){
        measurementm=yTOmeters(measurement);
    }
    else{
        measurementm=measurement;
    }
    cout<<"your measurement will be"<<measurementm<<"in meters."<<endl;
}

我没有包括这些功能,因为我知道它们有效。我的问题是我如何使它使我的循环和 if 语句在给定正确输入时起作用?另外,我如何使代码接受正确输入的大写字母?

我立即

看到您的程序存在一些问题。从您提供的代码中,尚未声明变量measure,并且已声明了两个名为 measurement 的变量。

至于输入,你有没有想过用 switch 语句来处理它?您可以对不同的大小写使用字符,并编写默认大小写来处理任何无效输入。

最后,与其使用 while 循环,不如让函数int main返回 return main();,这将是循环这个简单程序的好方法。

如前所述,此代码存在许多问题,无法编译。试试这个:

#include <iostream>
#include <string>
#include <cctype>
using namespace std;
float inTOmeters(float);
float ftTOmeters(float);
float cmTOmeters(float);
float yTOmeters(float);
int main()
{
    float input, measurement=0.0;
    char unit;
    cout<<"Enter the number you want to convert:"<<endl;
    cin>>input;
    cout<<"Now enter the unit of measurement you want to use:"<<endl;
    cout<<"i=inches, f=feet, c=centimeters, y=yards, m=meters"<<endl;
    while(true){
        cin >> unit;
        unit = std::toupper(unit);
        if(unit=='I'){
            measurement=inTOmeters(measurement);
        }
        else if(unit=='C'){
            measurement=cmTOmeters(measurement);
        }
        else if(unit=='F'){
            measurement=ftTOmeters(measurement);
        }
        else if(unit=='Y'){
            measurement=yTOmeters(measurement);
        }
        else if(unit=='M'){
            measurement = input;
        }
        else if(unit=='X'){
            break;
        }
        else{
            cout << "'" << unit << "'" << "is invalid. Choose i, m, c, y, or f." << endl;
            continue;
        }
        cout << input << " is " << measurement << " in meters." << endl;
        break;
    }
}

一些错误

你从不输入单位,你需要在某个地方cin >> unit;

逻辑错误,你用了"或",而你应该使用"和"。

 while(unit !="i" && unit !="m" && unit !="c" && unit !="y" && unit !="f"){
        cout<<"Invalid input pick from I, m, c, y, or f"<<endl;
        cin>>unit;
    }

我想一想,你会意识到单位不等于"i"或单位不等于"m"总是正确的。