C++ 带循环的字符串的输入验证
C++ Input validation for strings with loop
我正在尝试制作一个程序,其中用户输入一个数字和一个字母,表示他们使用的测量单位(例如英寸=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"总是正确的。
相关文章:
- 正在尝试了解输入验证循环
- 如何在C++中检查2D数组中负值的输入验证
- cin 的十进制输入验证?
- 输入验证以筛选出字符、字符串和一系列整数
- 输入验证将数字放入向量中
- 在C++中使用字符数组进行输入验证
- 在C++中使用字符数组进行用户输入验证
- C++ 中字符数组的输入验证
- 检查节点的输入验证的整数
- 如何让我的程序在输入验证的基础上读取素数
- C++ 用户输入验证无法正常工作
- 程序终止,而不是继续整数输入验证循环
- 使用REGEX进行电子邮件输入验证C
- C++:输入验证器函数
- 将用户输入验证为整数:用户必须两次输入输入
- C 输入验证
- C :对输入验证函数进行编程的性能影响可以对其进行编程,而每次都可以将其编程
- 使用模板函数进行通用输入验证
- 为什么用于输入验证的 while 循环要么完全跳过循环,要么不考虑错误的输入
- 仅 C++ 字母和空格输入验证