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();
}
Как правильно проверить ввод из командной строки?C++ Как проверить номер ввода от оболочки
Ниже приведено какое-то ложное испытание, что мы должны запустить код в части else
.
Foo 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);
}
}
А теперь есть оболочка для запуска этого кода, но в оболочке, существует вход, как показано ниже:
введите индекс и номер 2 1
это правильный один
вход индекс и Num 2
это просто еще одна ценность, и программа блокируется здесь, чтобы ждать другого входа, я должен понять это и выход «ошибка , попробуйте еще раз»
ввода индекса и Num 1 2 3
это тоже неправильно, потому что там re более 2 входных значений. то же самое, я должен понять, что выход и выход «ошибка, повторите попытку»
Как с этим справиться?
Start, проверив это: 'CIN >> I >> J;' * Как вы знаете, эти экстракцию преуспели * И каковы последствия этой линии, что следует, если они * не *? ? И обратите внимание, если вы не справитесь с этим извлечением, вы упадете в кроличью дыру в бесконечный цикл, так как 'cin' никогда не очищается от состояния ошибки. – WhozCraig
Вы можете комбинировать ala 'if (cin >> i >> j && j <= 5 && j > 0 && i> 0 && i <= 9) {...', поэтому 'if' вводится только в том случае, если работает синтаксический ввод. Вызов 'test()' снова не будет работать, если вы сначала не назовете 'cin.clear()'; затем 'cin.ignore (some-bloody-big-number-from-numeric-limits);' - просто google 'std :: cin.ignore', и вы найдете кровавое большое число в примерах; -P. –