我有一个非常简单的C ++控制台程序。它工作正常,但我有一些问题。 我有2个功能。第一个被称为“输入”的函数要求用户输入从6到10的数字。在该函数中我声明:
if ((a[i][j] < 6) || (a[i][j] > 10))
{
cout<<"Invalid input!";
return 0;
}
第二个称为“输出”的函数,从第一个函数打印出这些数字。
主要是:
int main ()
{
...
input (matrix, number);
output (matrix, nubmer);
}
我的问题是这个。当我输入不是6-10的数字时,我的程序仍然执行“输出”功能,因此它会打印一些随机数。当输入规则被破坏时,如何在准确的时间内打破整个程序?没有任何随机输出和东西,只是打印“无效输出”,然后从头开始程序?
答案 0 :(得分:7)
您可以在致电input()
之前检查output()
的返回值。
您可以使用exit()
函数终止程序
答案 1 :(得分:3)
if(input(matrix,number) != 0) output(matrix,number);
// You don't {} for a single instruction
这可以解决您的问题。
答案 2 :(得分:2)
指示错误的常用方法是抛出异常。
int main() {
...
try {
input(matrix, number);
output(matrix, number);
} catch(std::exception& e) {
std::cout << "Error: " << e.what();
}
}
输入:
if ((a[i][j] < 6) || (a[i][j] > 10))
{
throw std::runtime_error("Invalid input!");
}
答案 3 :(得分:2)
如果输入函数在无效输入时返回0,而另一个值在成功时返回,则可以运行循环直到输入有效
...
while(input(matrix,number) == 0);
...
答案 4 :(得分:2)
惯用代码就是这样:
while(input (matrix, number)) //idiomatic loop
{
output (matrix, nubmer);
}
当输入无效时input()
函数应返回false
或0
,输入有效时应返回true
或非零。
上面的循环与我们写std::istream
成语的形式相同:
std::string word;
while( std::cin >> word )
{
//..
}
//Or
ifstream file;
//...
while( file >> word )
{
//..
}
//Or
while( std::getline(file, word))
{
//..
}
我在这里解释了这个成语,关于它是如何工作的:
答案 5 :(得分:1)
有很多解决方案。一种是声明input
函数返回一个整数。成功input
可以返回0
。失败时(输入超出范围6-10)input
返回负数(-1
以简化)。在main函数内部,使用while循环继续调用input
,直到它返回0表示成功。每次input
失败,您都可以打印一条消息,告诉客户再次尝试输入。如果您想在第一次input
失败后立即退出,可以在exit(1)
内拨打main
。