【发布时间】:2015-03-29 17:33:56
【问题描述】:
我有以下代码:
//...
int variable_1, variable_2;
cout << "Please enter the 2 numbers: ";
try
{
if ( !(cin >> variable_1) ) throw Invalid_number(); //empty class just for exceptions
if ( !(cin >> variable_2) ) throw Invalid_number(); //problem is here.
}
catch (Invalid_number) {cerr << "You must enter integers\n"; return -1;}
//...
因此,如果我为 variable_1 输入一个整数,为 variable_2 输入一个 double,程序不会抛出异常,它只是继续执行程序的其余部分。从调试中我看到,当我输入一个双变量_2 即 2.4 时,它只是将其转换为 2 并且不会引发异常。相反,如果我为 variable_1 输入双精度,它会抛出异常,它被捕获并且程序结束(返回 -1)。有谁知道为什么会发生这种情况以及如何让它在每次输入的两个数字中的任何一个不是 int 时都抛出异常?
【问题讨论】:
-
整数的提取在第一个非消耗字符处停止,这就是重点(也可以是任何非“整数字符”)。