如何重构逻辑以更好地处理错误?
How to refactor logic for better error handling?
我为我的入门级 C++ class 编写了这个简短的控制台程序,从技术上讲,它运行正常,并且我满足了所有标准。但是,我不喜欢控制台 window 在输入失败后关闭,我想了解如何重构这个程序,以便失败的输入提示新的、正确的输入,从用户停止的地方继续。我觉得也许有办法用数组和 do...while
循环来做到这一点,但我的实验失败了。如果我不是很清楚,我很抱歉,我是一个初学者。
#include <iostream>
using namespace std;
float first;
float second;
float third;
float fourth;
float fifth;
float total;
int main(){
// Promt the user to enter 5 decimal values
cout << "Enter 5 decimal values: ";
cin >> first >> second >> third >> fourth >> fifth;
// Clear and discard input errors
if (cin.fail()) {
cout << "Invalid entry; Please enter numbers only." << endl;
cin.clear();
cin.ignore(10000, '\n');
}
else {
// Add the values together
total = first + second + third + fourth + fifth;
// Convert to the nearest integer and print the result
cout << fixed << setprecision(0) << "The total is: " << total << endl;
}
system("pause");
return 0;
}
顺便说一下,我知道 using std
被认为是不好的做法;但是,这是作业要求的一部分,所以我把它留了下来。
您的评论已经在正确的轨道上:
I feel like maybe there's a way to do this with an array and a do...while loop
您可以通过在输入 周围使用循环来做到这一点。这意味着您 一直要求输入,直到他们给您输入有效的 。
为此,我在用户输入周围放置了一个循环,然后添加了一些在开始输入后进行清理的代码。这意味着在请求输入之前,它会先清除所有内容,并在每次循环时都执行相同的操作。
一个可能的解决方案是:
#include <iostream>
using namespace std;
float first;
float second;
float third;
float fourth;
float fifth;
float total;
int main(){
do {
// Clear and discard input errors
cin.clear();
cin.ignore(10000, '\n');
// Prompt the user to enter 5 decimal values
cout << "Enter 5 decimal values: ";
cin >> first >> second >> third >> fourth >> fifth;
} while (cin.fail());
// Add the values together
total = first + second + third + fourth + fifth;
// Convert to the nearest integer and print the result
cout << fixed << setprecision(0) << "The total is: " << total << endl;
system("pause");
return 0;
}
您服用的 class 似乎跟在 Google Code University's C++ tutorial as mentioned in this Stack Overflow post 之后。查看这些资源以进一步改进您的代码。
有了 while 循环,您甚至不需要像这样使用五个变量:
#include <iostream>
#include <iomanip>
using namespace std;
float input;
float total;
int main(){
// Promt the user to enter 5 decimal values
int valuesEntered = 0;
while (valuesEntered < 5)
{
cout << "please enter " << (5 - (valuesEntered)) << " numbers: ";
cin >> input;
if (cin.fail()) {
cout << "Invalid entry; Please enter numbers only." << endl;
cin.clear();
cin.ignore(10000, '\n');
}
else
{
total += input;
valuesEntered++;
}
}
cout << fixed << setprecision(0) << "The total is: " << total << endl;
system("pause");
return 0;
}
我为我的入门级 C++ class 编写了这个简短的控制台程序,从技术上讲,它运行正常,并且我满足了所有标准。但是,我不喜欢控制台 window 在输入失败后关闭,我想了解如何重构这个程序,以便失败的输入提示新的、正确的输入,从用户停止的地方继续。我觉得也许有办法用数组和 do...while
循环来做到这一点,但我的实验失败了。如果我不是很清楚,我很抱歉,我是一个初学者。
#include <iostream>
using namespace std;
float first;
float second;
float third;
float fourth;
float fifth;
float total;
int main(){
// Promt the user to enter 5 decimal values
cout << "Enter 5 decimal values: ";
cin >> first >> second >> third >> fourth >> fifth;
// Clear and discard input errors
if (cin.fail()) {
cout << "Invalid entry; Please enter numbers only." << endl;
cin.clear();
cin.ignore(10000, '\n');
}
else {
// Add the values together
total = first + second + third + fourth + fifth;
// Convert to the nearest integer and print the result
cout << fixed << setprecision(0) << "The total is: " << total << endl;
}
system("pause");
return 0;
}
顺便说一下,我知道 using std
被认为是不好的做法;但是,这是作业要求的一部分,所以我把它留了下来。
您的评论已经在正确的轨道上:
I feel like maybe there's a way to do this with an array and a do...while loop
您可以通过在输入 周围使用循环来做到这一点。这意味着您 一直要求输入,直到他们给您输入有效的 。
为此,我在用户输入周围放置了一个循环,然后添加了一些在开始输入后进行清理的代码。这意味着在请求输入之前,它会先清除所有内容,并在每次循环时都执行相同的操作。
一个可能的解决方案是:
#include <iostream>
using namespace std;
float first;
float second;
float third;
float fourth;
float fifth;
float total;
int main(){
do {
// Clear and discard input errors
cin.clear();
cin.ignore(10000, '\n');
// Prompt the user to enter 5 decimal values
cout << "Enter 5 decimal values: ";
cin >> first >> second >> third >> fourth >> fifth;
} while (cin.fail());
// Add the values together
total = first + second + third + fourth + fifth;
// Convert to the nearest integer and print the result
cout << fixed << setprecision(0) << "The total is: " << total << endl;
system("pause");
return 0;
}
您服用的 class 似乎跟在 Google Code University's C++ tutorial as mentioned in this Stack Overflow post 之后。查看这些资源以进一步改进您的代码。
有了 while 循环,您甚至不需要像这样使用五个变量:
#include <iostream>
#include <iomanip>
using namespace std;
float input;
float total;
int main(){
// Promt the user to enter 5 decimal values
int valuesEntered = 0;
while (valuesEntered < 5)
{
cout << "please enter " << (5 - (valuesEntered)) << " numbers: ";
cin >> input;
if (cin.fail()) {
cout << "Invalid entry; Please enter numbers only." << endl;
cin.clear();
cin.ignore(10000, '\n');
}
else
{
total += input;
valuesEntered++;
}
}
cout << fixed << setprecision(0) << "The total is: " << total << endl;
system("pause");
return 0;
}