C++ C++;用户输入验证工作不正常
我有一段代码,要求输入一个数字并将其存储在一个变量中。我试图对输入进行验证,但它的行为很奇怪C++ C++;用户输入验证工作不正常,c++,validation,C++,Validation,我有一段代码,要求输入一个数字并将其存储在一个变量中。我试图对输入进行验证,但它的行为很奇怪 #include <iostream> using namespace std; float coursework_mark; float exam_mark; float module_mark; int main() { //COURSEWORK INPUT WITH VALIDATION cout << "Please enter your cours
#include <iostream>
using namespace std;
float coursework_mark;
float exam_mark;
float module_mark;
int main() {
//COURSEWORK INPUT WITH VALIDATION
cout << "Please enter your coursework mark: ";
while(!(cin >> coursework_mark)){
cin.clear();
cin.ignore(1000, '\n');
cout << "Invalid data type, please enter valid coursework mark: ";
}
while (coursework_mark < 0 || coursework_mark > 100) {
cout << "Out of range, please enter valid coursework mark: ";
cin >> coursework_mark;
}
//EXAM MARK INPUT WITH VALIDATION
cout << "Please enter your exam mark: ";
while(!(cin >> exam_mark)) {
cin.clear();
cin.ignore(1000, '\n');
cout << "Invalid data type, please enter valid exam mark: ";
}
while (exam_mark < 0 || exam_mark > 100) {
cout << "Out of range, please enter valid exam mark: ";
cin >> exam_mark;
}
//Coursework capping
if (coursework_mark > exam_mark * 2) { coursework_mark = exam_mark * 2;}
//Calculate Module mark
module_mark = (coursework_mark* 0.4) + (exam_mark* 0.6);
//Output results
cout << coursework_mark << endl;
cout << "Your module mark is " << module_mark << endl;
if (module_mark >= 50) {
cout << "Congratulations you have passed!" << endl;
} else if (module_mark < 50) {
cout << "Unfortunately, you have not passed" << endl;
}
}
#包括
使用名称空间std;
浮动课程分数;
浮动考试分数;
浮子模块标记;
int main(){
//带验证的课程作业输入
课程作业(分数){
cin.clear();
cin.忽略(1000,“\n”);
库特(100){
课程成绩;
}
//带验证的考试分数输入
考试(分数){
cin.clear();
cin.忽略(1000,“\n”);
库特(100){
考分;
}
//课程封顶
如果(作业分数>考试分数*2){coursework分数=考试分数*2;}
//计算模块标记
模块分数=(课程分数*0.4)+(考试分数*0.6);
//输出结果
不能而不是
while(!(cin >> coursework_mark)){
您应该使用std::getline
这个方法是我发现的检查字符串是否包含数字的最简单的方法。因此,如果它返回true,字符串只包含数字,否则它包含的不仅仅是数字
如果声明为假,则可以像上面所做的那样清除cin。请将代码减少到仅导致问题的部分,请参阅。顺便说一句,您应该从计算中指定IO,使用函数作为模块化。最后一个else If
可以是else
。
std::getline(std::cin, coursework_mark);
bool has_only_digits(string s){
return s.find_first_not_of( "0123456789" ) == string::npos;}