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

时间:2013-09-25 22:54:29

标签: c++ string validation if-statement

我正在尝试创建一个程序,用户输入一个数字和一个字母来表示他们使用的测量单位(ex inches = i,feet = 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语句起作用?另外我如何使代码接受正确输入的大写字母?

3 个答案:

答案 0 :(得分:1)

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

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

最后,您可以让函数int main返回return main();而不是while循环,这将是循环此简单程序的好方法。

答案 1 :(得分:0)

一些错误

你从不输入单位,你需要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”总是是真的。

答案 2 :(得分:0)

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

#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;
    }
}