过去,我一直在用c#编程,但是现在我正在学习c ++。为什么在我输入字符串时在c ++中退出while循环,而在我不使用tryparse的情况下在c#中退出则将给出异常。 C ++是否在后端中显式执行tryparse之类的操作? 对不起,如果我的问题 我正在使用代码块作为我的c ++ IDE。
我正在阅读c ++素数这本书,并编写一个简单的程序,该程序连续将整数作为输入,直到输入字符串为止。我在c#中编写了相同的代码,但它导致我出错。所以我必须在C#中使用tryparse方法。
int value = 0;
在C ++中
while( cin >> value );
在C#中
while( value == int.parse(Console.ReadLine());
答案 0 :(得分:1)
为什么在输入字符串时c ++中的while循环退出
operator>>
在内部执行错误处理。如果未能提取整数,则流将进入失败状态,并且循环将检查流的状态,因此当流失败时将退出。
在c#中,如果我不使用tryparse,它将给出异常。
是的,因为这是int.parse()
的定义工作方式。
您可以通过enabling exceptions in the stream在C ++中获得类似的行为。这样,如果发生提取失败,则会抛出std::ios_base::failure
异常。
C ++是否在后端明确执行tryparse之类的事情?
从某种意义上说,是
我正在阅读c ++素数这本书,并编写一个简单的程序,该程序连续将整数作为输入,直到输入字符串为止。我用c#编写了相同的代码,但它导致我出错。
您的C ++和C#代码不相同。
您的C#代码按原样读取整行,放弃换行符,然后尝试将整行按原样转换为int。
您的C ++代码将丢弃前导空格-包括换行符-直到遇到非空格字符,然后尝试读取一个int值,并且其后的所有内容-包括换行符-都保留在流中以供后续读取
所以我必须在C#中使用tryparse方法。
如果您不希望转换失败而引发异常,那么可以。
答案 1 :(得分:0)
C ++知道要解析整数,因为您将变量“ value”定义为int类型。
来自C ++参考:
作为istream类的对象,可以将字符检索为 使用提取运算符(operator >>)或 未格式化的数据,使用诸如read之类的成员函数。