退出“在读取行时执行”循环不起作用
本文关键字:执行 循环 不起作用 读取 退出 | 更新日期: 2023-09-27 18:33:50
我正在尝试学习C#,因为我在这方面的经验很少。我想在Do While
循环中设置一个 Console.Readline,这样我就可以将未知数量的值读入数组。它永远不会退出,因此while
中的比较不起作用。怎么了?
do
{
line = Console.Read();
if (line != null)
numbers[c++] = line;
numbers = new int[c+1];
} while (line != null);
首先,我会使用List<int>
来保存输入值。这避免了重新调整数组大小的必要性,您可以将列表用作普通数组。
其次,Console.Read 和 Console.ReadLine 之间有很多区别。第一个逐个返回键入的字符的字符代码,按 Enter 将仅返回 Enter 键的字符代码 (13(。要退出循环,您需要按 Ctrl + Z,返回 -1,而不是 null。
List<int> numbers = new List<int>();
int line;
do
{
line = Console.Read();
if (line != -1)
numbers.Add(line);
} while (line != -1);
for(int x = 0; x < numbers.Count(); x++)
Console.WriteLine(numbers[x]);
但是,这可能不是您真正想要的。如果需要将键入的数字存储为实整数,则需要这样的代码:
List<int> numbers = new List<int>();
string line = Console.ReadLine();
int number;
do
{
if(int.TryParse(line, out number))
numbers.Add(number);
} while (!string.IsNullOrWhiteSpace(line = Console.ReadLine()));
for(int x = 0; x < numbers.Count(); x++)
Console.WriteLine(numbers[x]);
在这个版本中,我在进入循环之前获得行输入,然后继续直到按下 Enter 键。在每个循环中,我都尝试将输入转换为有效的整数。
另请注意使用 TryParse 将字符串转换为整数。如果用户键入类似"abcdef"的内容,则 TryParse 将返回 false 而不会引发异常。
(感谢@Patrick的建议。
如果您使用的是Console.Readline()
那么如果您按Ctrl+Z
line
将被null
(如@Patrick所述(。您应该改为检查空字符串:
do
{
line = Console.ReadLine();
if (line != null)
numbers[c++] = int.Parse(line); //assigning string to the last element in the array of ints?
//if you need to parse string to int, use int.Parse() or Convert.ToInt32()
//whatever suits your needs
numbers = new int[c+1];
} while (!string.IsNullOrEmpty(line));
无论如何,不清楚您尝试使用此代码完成什么,因为您在每次迭代中都会创建新数组。此外,这将不起作用,因为您有一个int
数组,但为其分配了一个string
值。