【发布时间】:2015-04-03 18:56:11
【问题描述】:
void test() {
int i ,j;
cout << "enter the i and j" << endl;
cin >> i >> j;
if (j <= 5 && j > 0 && i > 0 && i <= 9) {
cout << "right" <<endl;
} else {
cout << "error" << endl;
test();
}
}
int main(int argc, const char * argv[]) {
test();
}
如何检查命令行输入是否完全正确?
下面是一些错误测试,我们应该运行 else 部分中的代码。
富ags
但是命令行中的结果是28行错误信息。 但我想要的只是一行代码显示“错误”
有什么问题?
另一个
下面是我的 C++ 代码:
void test(int array[], int length) {
int index; // the index of heap array that human want to modify
int num; // the number of heap in the index position
cout << "input the index and num" << endl << flush;
string si,sj;
try{
cin >> si >> sj;
index = stoi(sj);
num = stoi(si);
}catch(std::exception e){
cout << "error, try again" << endl;
test(array, length);
}
if (index <= length && index > 0 && num > 0 && num <= array[index - 1]) {
array[index - 1] -= num;
// print(array, length);
} else {
cout << "error, try again" << endl;
test(array, length);
}
}
现在有一个shell来运行这段代码,但是在shell中,存在如下输入:
输入索引和数字 2 1
这是正确的
输入索引和数字2
它只有 1 个值,程序在这里阻塞等待另一个输入,我应该弄清楚并输出“错误,再试一次”
输入索引和数字 1 2 3
这也是不正确的,因为有超过 2 个输入值。同样,我应该弄清楚并输出“错误,重试”
如何处理?
【问题讨论】:
-
首先检查一下:
cin >> i >> j;你怎么知道这些提取成功了?如果他们没有没有,接下来的行的后果是什么?我> ?请注意,如果提取失败,您将陷入兔子洞,陷入无限循环,因为cin永远不会清除其错误状态。 -
您可以组合ala
if (cin >> i >> j && j <= 5 && j > 0 && i > 0 && i <= 9) { ...,因此只有在输入解析也有效时才会输入if。除非您先致电cin.clear(),否则再次致电test()将不起作用;然后cin.ignore(some-bloody-big-number-from-numeric-limits);- 只需谷歌std::cin.ignore,您就会在示例中找到该死的大数字;-P。