2

为什么 Console.ReadLine() 不能在 C# 中存储 int/double ?与 C++ 中的“cin >>”相反,它可以根据变量存储任何内容。

4

4 回答 4

7

不同的语言、不同的库、不同的 API、不同的设计决策等。

cin.operator>>传递了一个引用以用作输出参数,并且在此参数类型上重载。Console.ReadLine 返回一个值并且没有重载。

您可以为 like 编写自己的扩展方法,Console例如,GetValue传递一个 out 参数并在您希望的任意数量的类型上重载。

于 2014-07-22T22:32:11.673 回答
2

控制台本身就是文本输入。 Console.ReadLine()(和其他方法)不为您进行解析,而是让您自己解析。

然而,这有一个优势,因为它可以更轻松地干净地处理错误情况(例如,如果您想读取双精度,并且用户键入“foo”)。

于 2014-07-22T22:28:21.207 回答
0

因为读取字符串更安全。当流的状态变得错误时,它可以防止诸如 C++ 中的错误数据之类的错误。

于 2014-07-22T22:34:34.190 回答
0

Console.ReadLine() 确实存储了字符串,因为它是这样构建的。但是,您可以检查您的输入并将转换为您想要的类型。

例如,您可以这样做:

string sen = Console.ReadLine();
int b;
int.TryParse(sen, out b);
Console.WriteLine(b);

您可以使用上面的代码获取输入,然后将结果作为 int 放入 b 中。例如,如果输入不是数字,则 b 将存储 0。

如果你想这样做来加倍,那么你应该做 double.TryParse 并将它放在一个 double 变量上。

于 2021-01-11T18:33:48.860 回答