我知道如何使控制台读取两个整数但每个整数由它自己像这样
int a = int.Parse(Console.ReadLine());
int b = int.Parse(Console.ReadLine());
如果我输入两个数字,即(1 2),则值(1 2),不能解析为整数 我想要的是如果我输入1 2那么它将把它作为两个整数
答案 0 :(得分:26)
一种选择是接受单行输入作为字符串然后处理它。 例如:
//Read line, and split it by whitespace into an array of strings
string[] tokens = Console.ReadLine().Split();
//Parse element 0
int a = int.Parse(tokens[0]);
//Parse element 1
int b = int.Parse(tokens[1]);
这种方法的一个问题是,如果用户没有以预期格式输入文本,它将失败(通过抛出IndexOutOfRangeException
/ FormatException
)。如果可以,则必须验证输入。
例如,使用正则表达式:
string line = Console.ReadLine();
// If the line consists of a sequence of digits, followed by whitespaces,
// followed by another sequence of digits (doesn't handle overflows)
if(new Regex(@"^\d+\s+\d+$").IsMatch(line))
{
... // Valid: process input
}
else
{
... // Invalid input
}
或者:
int.TryParse
尝试将字符串解析为数字。 答案 1 :(得分:6)
你需要类似的东西(没有错误检查代码)
var ints = Console
.ReadLine()
.Split()
.Select(int.Parse);
这会读取一行,在空格上拆分并将拆分字符串解析为整数。当然,实际上你需要检查输入的字符串是否实际上是有效整数(int.TryParse)。
答案 2 :(得分:5)
然后你应该首先将它存储在一个字符串中,然后使用空格作为标记将其拆分。
答案 3 :(得分:3)
将该行读入字符串,拆分字符串,然后解析元素。一个简单的版本(需要添加错误检查)将是:
string s = Console.ReadLine();
string[] values = s.Split(' ');
int a = int.Parse(values[0]);
int b = int.Parse(values[1]);
答案 4 :(得分:2)
string[] values = Console.ReadLine().Split(' ');
int x = int.Parse(values[0]);
int y = int.Parse(values[1]);
答案 5 :(得分:1)
在1行中,感谢LinQ和正则表达式(不需要类型检查)
var numbers = from Match number in new Regex(@"\d+").Matches(Console.ReadLine())
select int.Parse(number.Value);
答案 6 :(得分:1)
string x;
int m;
int n;
Console.WriteLine("Enter two no's seperated by space: ");
x = Console.ReadLine();
m = Convert.ToInt32(x.Split(' ')[0]);
n = Convert.ToInt32(x.Split(' ')[1]);
Console.WriteLine("" + m + " " + n);
这应该按照你的需要工作!
答案 7 :(得分:1)
public static class ConsoleInput
{
public static IEnumerable<int> ReadInts()
{
return SplitInput(Console.ReadLine()).Select(int.Parse);
}
private static IEnumerable<string> SplitInput(string input)
{
return Regex.Split(input, @"\s+")
.Where(x => !string.IsNullOrWhiteSpace(x));
}
}
答案 8 :(得分:1)
int a, b;
string line = Console.ReadLine();
string[] numbers= line.Split(' ');
a = int.Parse(numbers[0]);
b = int.Parse(numbers[1]);
答案 9 :(得分:0)
试试这个:
PhantomData<&'a mut Graph>
希望有所帮助:)
答案 10 :(得分:0)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SortInSubSet
{
class Program
{
static int N, K;
static Dictionary<int, int> dicElements = new Dictionary<int, int>();
static void Main(string[] args)
{
while (!ReadNK())
{
Console.WriteLine("***************** PLEASE RETRY*********************");
}
var sortedDict = from entry in dicElements orderby entry.Key/3 , entry.Value ascending select entry.Value;
foreach (int ele in sortedDict)
{
Console.Write(ele.ToString() + " ");
}
Console.ReadKey();
}
static bool ReadNK()
{
dicElements = new Dictionary<int, int>();
Console.WriteLine("Please entere the No. of element 'N' ( Between 2 and 9999) and Subset Size 'K' Separated by space.");
string[] NK = Console.ReadLine().Split();
if (NK.Length != 2)
{
Console.WriteLine("Please enter N and K values correctly.");
return false;
}
if (int.TryParse(NK[0], out N))
{
if (N < 2 || N > 9999)
{
Console.WriteLine("Value of 'N' Should be Between 2 and 9999.");
return false;
}
}
else
{
Console.WriteLine("Invalid number: Value of 'N' Should be greater than 1 and lessthan 10000.");
return false;
}
if (int.TryParse(NK[1], out K))
{
Console.WriteLine("Enter all elements Separated by space.");
string[] kElements = Console.ReadLine().Split();
for (int i = 0; i < kElements.Length; i++)
{
int ele;
if (int.TryParse(kElements[i], out ele))
{
if (ele < -99999 || ele > 99999)
{
Console.WriteLine("Invalid Range( " + kElements[i] + "): Element value should be Between -99999 and 99999.");
return false;
}
dicElements.Add(i, ele);
}
else
{
Console.WriteLine("Invalid number( " + kElements[i] + "): Element value should be Between -99999 and 99999.");
return false;
}
}
}
else
{
Console.WriteLine(" Invalid number ,Value of 'K'.");
return false;
}
return true;
}
}
}
答案 11 :(得分:0)
我有一个更简单的解决方案,使用switch语句并在每种情况下为用户编写消息,使用以(&#34; \ n&#34;)开头的Console.write()。
这是一个在获取用户输入的同时用for循环填充数组的示例。 *注意:您不需要为此工作编写for循环* 尝试使用名为arrayOfNumbers []的整数数组和临时整数变量。在单独的控制台应用程序中运行此代码,并观察如何在同一行上获取用户输入!
int temp=0;
int[] arrayOfNumbers = new int[5];
for (int i = 0; i < arrayOfNumbers.Length; i++)
{
switch (i + 1)
{
case 1:
Console.Write("\nEnter First number: ");
//notice the "\n" at the start of the string
break;
case 2:
Console.Write("\nEnter Second number: ");
break;
case 3:
Console.Write("\nEnter Third number: ");
break;
case 4:
Console.Write("\nEnter Fourth number: ");
break;
case 5:
Console.Write("\nEnter Fifth number: ");
break;
} // end of switch
temp = Int32.Parse(Console.ReadLine()); // convert
arrayOfNumbers[i] = temp; // filling the array
}// end of for loop
这里的一个神奇伎俩就是你愚弄控制台应用程序,秘诀就是你在用户输入的同一行上写了你的提示信息。 (message =&gt;&#34;输入第一个数字:&#34;)
这使得用户输入看起来像是插在同一行上。我承认它有点原始,但它可以满足您的需求,而不必为复杂的代码浪费您的时间来完成这么简单的任务。