C# equivalent to Java's scn.nextInt( )
本文关键字:scn nextInt equivalent to Java | 更新日期: 2023-09-27 18:04:56
在Java中,如果我们想要从控制台读取用户输入,我们可以做以下操作:
Scanner scn = new Scanner (System.in);
int x;
x = scn.nextInt(); //Receive integer input
在c#中,我假设我们这样做:
int x;
x = Console.Read(); //Receive integer input
但是当我输入7
时,输出是55
。
读取输入的其他两个选项是ReadLine()
,可能用于读取字符串,ReadKey()
可能用于检测您按下的哪个键(请纠正我,如果我错了)。
请不要告诉我我们必须使用ReadLine并每次都将整个值解析为int,那将是可怕的:-(
EDIT:在SO中,提出了类似的问题(c# Console.Read()和Console.ReadLine()问题),但给出的所有解决方案都是使用int.TryParse
和一系列代码来接收int
或double
输入,我发现这太不方便了,只是做一个简单的任务。
我发现我们实际上可以这样做:
int a = int.Parse(Console.ReadLine());
所以与其问一个重复的问题,我的新问题是:当我使用int a = int.Parse(Console.ReadLine());
接收int
输入时,它是否相当于Java的scn.nextInt()
?
当我使用int时,它是否等同于Java的scanner.nextInt() a = int. parse (Console.ReadLine());接收int输入?
是的。Java的Scanner.nextInt()
在没有接收到整数输入时抛出异常,net的int.Parse(Console.ReadLine())
也是如此。
这可能晚了一年,但是…
static int GetInt() {
int integer = 0;
int n = Console.Read();
while (n == ' ' || n == ''n' || n == ''r' || n == ''t' || n == -1)
n = Console.Read();
while (n >= '0' && n <= '9') {
integer = integer * 10 + n - '0';
n = Console.Read();
}
return integer;
}
这与Java的nextInt()方法或多或少相同。它目前不支持负值,但可以通过检查第一个读取值是否为'-'来轻松实现,如果是,则将最终值乘以-1。
是的,您需要使用ReadLine,解析输入并不那么困难。只需使用TryParse方法:
int input;
bool isValid = int.TryParse(Console.ReadLine(),out input);
if(isValid)
{
...
}
Console.Read
从控制台读取下一个字符,并且它返回字符的ASCII
代码,这就是为什么您得到55
而不是7
。
你可以使用NuGet中的这个库,它在c#中提供Java Scanner/c++ cin风格的输入:https://www.nuget.org/packages/Nakov.IO.Cin/
示例:using System;
using Nakov.IO;
public class EnterNumbers
{
static void Main()
{
int n = Cin.NextInt();
int[] numbers = new int[n];
for (int i = 0; i < n; i++)
numbers[i] = Cin.NextInt();
for (int i = 0; i < n; i++)
Console.Write(numbers[i] + " ");
}
}