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和一系列代码来接收intdouble输入,我发现这太不方便了,只是做一个简单的任务。

我发现我们实际上可以这样做:

int a = int.Parse(Console.ReadLine());

所以与其问一个重复的问题,我的新问题是:当我使用int a = int.Parse(Console.ReadLine());接收int输入时,它是否相当于Java的scn.nextInt() ?

C# equivalent to Java's 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] + " ");
    }
}