2016-03-05 2 views
-6

Я понятия не имею, как я отклонил бы недействительные исходные данные для экзаменов и заданий (действительные числа 0.00 - 100.00). но мне также нужно дать пользователю еще один шанс ввести действительный ввод. поэтому, если они помещают два недопустимых ввода в строке для одной и той же переменной, он сообщает пользователю, что им необходимо перезапустить программу и не запускать ее. Я новичок в программировании, поэтому я не очень хорошо это понимаю.Как я могу отклонить недействительные входы в моем коде?

#include <iostream> 
#include <string> 
#include <iomanip> 
using namespace std; 

int main() 
{ 
float exam_1; 
float exam_2; 
float exam_3; 
float assignment_1; 
float assignment_2; 
float weighted_exam = .1667; 
float weighted_assignment = .25; 
float min_score = 0.00; 
float max_score = 100.00; 
string name; 

cout << "Please enter student name <First Last>: "; // this will ask for the students first and last name 
getline(cin, name); 

cout << "\n"; 

cout << "\t Be sure to include the decimal point for scores.\n"; 

cout <<"\t !!! All scores should range from 0.00 to 100.00!!! \n"; 

cout << "\t For example: 80.50 \n"; 

cout << "\n"; 

cout << "Please enter your exam 1 score: "; 
cin >> exam_1; 

cout << "Please enter your exam 2 score: "; 
cin >> exam_2;          

cout << "Please enter your exam 3 score: "; 
cin >> exam_3;           

cout << "Please enter your assignment 1 score: "; 
cin >> assignment_1;        

cout << "Please enter your assignment 2 score: "; 
cin >> assignment_2; 

cout << endl;       

cout << "-" << "OUTPUT" << "-\n"; 

return 0; 
} 
+0

вы должны сделать более минимальную, концентрированную версию вашего код, который должен сосредоточиться только на проблеме. Вы не можете ожидать, что мы прочитаем весь этот код. –

ответ

0

Вы можете сделать так:

do{ 
    cout <<"\t !!! All scores should range from 0.00 to 100.00!!! \n"; 
    cin >> exam_1; 
while(exam_1 < 0.0 || exam_1>100.0); 

Повторите это для всех входов

+0

ОК плохо попробуйте это. –

+0

@ DanielTeichler, таким образом вы будете запрашивать действительное значение, пока пользователь не поместит что-то, что звучит правильно! –

0
cout << "Please enter your exam 1 score: "; 
cin >> exam_1; 

cout << "Please enter your exam 2 score: "; 
cin >> exam_2;          

cout << "Please enter your exam 3 score: "; 
cin >> exam_3;           

Для

auto ReadExamScore = [](auto& ex, char c) 
{ 
    cout << "Please enter your exam " << c << " score: "; 

    for (int i = 0; i < 2; i ++) 
    { 
      if (cin >> ex) 
      { 
       if (ex>= 0.0 && ex <= 100.00) 
        return true; 
      } 

      cout << "Please enter a valid exam score" << endl; 
    } 

    cout << "Press any key to exit..." << endl; 
    getchar(); 
    exit(0); 
}; 

ReadExamScore(exam_1,'1'); 
ReadExamScore(exam_2,'2'); 
ReadExamScore(exam_3,'3'); 
Смежные вопросы