# C# 基本输入和输出

> 原文： [https://www.programiz.com/csharp-programming/basic-input-output](https://www.programiz.com/csharp-programming/basic-input-output)

#### 在本教程中，我们将学习如何使用各种方法从用户那里获取输入并在 C# 中显示输出

## C# 输出

为了在 C# 中输出内容，我们可以使用

```cs
System.Console.WriteLine() OR
System.Console.Write()
```

此处，`System`是[命名空间](https://www.programiz.com/csharp-programming/namespaces "C# namespaces")，`Console`是命名空间`System`中的类，`WriteLine`和`Write`是类`Console`的方法。

让我们看一个简单的示例，该示例将字符串输出到输出屏幕。

### 示例 1：使用`WriteLine()`打印字符串

```cs
using System;

namespace Sample
{
	class Test
	{
		public static void Main(string[] args)
		{
			Console.WriteLine("C# is cool");
		}
	}
} 
```

当我们运行程序时，输出将是

```cs
C# is cool
```

* * *

### `WriteLine()`和`Write()`方法之间的区别

`WriteLine()`和`Write()`之间的主要区别在于`Write()`方法仅打印提供给它的字符串，而`WriteLine()`方法则打印字符串并移至下一行的开头。

让我们看下面的示例，以了解这些方法之间的区别。

#### 示例 2：如何使用`WriteLine()`和`Write()`方法？

```cs
using System;

namespace Sample
{
	class Test
	{
		public static void Main(string[] args)
		{
			Console.WriteLine("Prints on ");
			Console.WriteLine("New line");

			Console.Write("Prints on ");
			Console.Write("Same line");
		}
	}
} 
```

当我们运行程序时，输出将是：

```cs
Prints on
New line
Prints on Same line
```

* * *

### 使用`WriteLine()`和`Write()`打印变量和字面值

`WriteLine()`和`Write()`方法可用于打印变量和字面值。 这是一个例子。

#### 示例 3：打印变量和字面值

```cs
using System;

namespace Sample
{
	class Test
	{
		public static void Main(string[] args)
		{
			int value = 10;

			// Variable
			Console.WriteLine(value);
			// Literal
			Console.WriteLine(50.05);
		}
	}
} 
```

当我们运行程序时，输出将是：

```cs
10
50.05
```

* * *

### 使用`+`运算符组合（连接）两个字符串并打印它们

在打印时，可以使用`+`操作符对字符串进行合并/连接。

#### 示例 4：打印使用`+`运算符连接的字符串

```cs
using System;

namespace Sample
{
	class Test
	{
		public static void Main(string[] args)
		{
			int val = 55;
			Console.WriteLine("Hello " + "World");
			Console.WriteLine("Value = " + val);
		}
	}
} 
```

当我们运行程序时，输出将是：

```cs
Hello World
Value = 55
```

* * *

### 使用字符串格式化打印连接的字符串【更好的选择】

打印连接字符串的更好的选择是使用格式化字符串。 格式化字符串允许程序员使用占位符作为变量。 例如，

下一行，

```cs
Console.WriteLine("Value = " + val);
```

可以替换为

```cs
Console.WriteLine("Value = {0}", val);
```

`{0}`是变量`val`的占位符，它将由`val`的值替换。 由于仅使用一个变量，因此只有一个占位符。

格式化的字符串中可以使用多个变量。 我们将在下面的示例中看到这一点。

#### 示例 5：使用字符串格式化打印连接的字符串

```cs
using System;

namespace Sample
{
	class Test
	{
		public static void Main(string[] args)
		{
			int firstNumber = 5, secondNumber = 10, result;
			result = firstNumber + secondNumber;
			Console.WriteLine("{0} + {1} = {2}", firstNumber, secondNumber, result);
		}
	}
} 
```

当我们运行程序时，输出将是：

```cs
5 + 10 = 15
```

在此，将`{0}`替换为`firstNumber`，将`{1}`替换为`secondNumber`，将`{2}`替换为`result`。 与使用`+`运算符相比，这种打印输出的方法更具可读性，并且不易出错。

要了解有关字符串格式的更多信息，请访问 *C# 字符串格式*。

* * *

## C# 输入

在 C# 中，从用户获取输入的最简单方法是使用`Console`类的`ReadLine()`方法。 但是，`Read()`和`ReadKey()`也可用于从用户那里获取输入。 它们也包含在`Console`类中。

### 示例 6：从用户获取字符串输入

```cs
using System;

namespace Sample
{
	class Test
	{
		public static void Main(string[] args)
		{
			string testString;
			Console.Write("Enter a string - ");
			testString = Console.ReadLine();
			Console.WriteLine("You entered '{0}'", testString);
		}
	}
} 
```

当我们运行程序时，输出将是：

```cs
Enter a string - Hello World
You entered 'Hello World'
```

* * *

### `ReadLine()`，`Read()`和`ReadKey()`方法之间的区别：

`ReadLine()`，`Read()`和`ReadKey()`方法之间的区别是：

*   `ReadLine()`：`ReadLine()`方法从标准输入流读取下一行输入。 它返回相同的字符串。
*   `Read()`：`Read()`方法从标准输入流中读取下一个字符。 它返回字符的 ascii 值。
*   `ReadKey()`：`ReadKey()`方法获取用户按下的下一个键。 此方法通常用于按住屏幕，直到用户按下某个键为止。

如果您想了解更多有关这些方法的信息，请参见以下关于 StackOverflow 的有趣讨论： [`Console.Read()`和`Console.ReadLine()`之间的区别？](https://stackoverflow.com/questions/6825943/difference-between-console-read-and-console-readline "Difference between Read and ReadLine") 。

* * *

#### 示例 7：`Read()`和`ReadKey()`方法之间的区别

```cs
using System;

namespace Sample
{
	class Test
	{
		public static void Main(string[] args)
		{
			int userInput;

			Console.WriteLine("Press any key to continue...");
			Console.ReadKey();
			Console.WriteLine();

			Console.Write("Input using Read() - ");
			userInput = Console.Read();
			Console.WriteLine("Ascii Value = {0}",userInput);
		}
	}
}
```

当我们运行程序时，输出将是：

```cs
Press any key to continue...
x
Input using Read() - Learning C#
Ascii Value = 76
```

从此示例中，必须清楚`ReadKey()`和`Read()`方法的工作方式。 在使用`ReadKey()`时，一旦按下该键，它就会显示在屏幕上。

使用`Read()`时，它占一行，但仅返回第一个字符的 ASCII 值。 因此，将打印`76`（`L`的 ASCII 值）。

* * *

### 读取数值（整数和浮点类型）

在 C# 中，读取字符或字符串非常简单。 您需要做的就是根据需要调用相应的方法。

但是，在 C# 中读取数字值可能会有些棘手。 我们仍将使用与获取字符串值相同的`ReadLine()`方法。 但是由于`ReadLine()`方法将输入作为字符串接收，因此需要将其转换为整数或浮点类型。

转换输入的一种简单方法是使用`Convert`类的方法。

#### 示例 8：使用`Convert`类从用户读取数值

```cs
using System;

namespace UserInput
{
	class MyClass
	{
		public static void Main(string[] args)
		{
			string userInput;
			int intVal;
			double doubleVal;

			Console.Write("Enter integer value: ");
			userInput = Console.ReadLine();
			/* Converts to integer type */
			intVal = Convert.ToInt32(userInput);
			Console.WriteLine("You entered {0}",intVal);

			Console.Write("Enter double value: ");
			userInput = Console.ReadLine();
			/* Converts to double type */
			doubleVal = Convert.ToDouble(userInput);
			Console.WriteLine("You entered {0}",doubleVal);
		}
	}
} 
```

当我们运行程序时，输出将是：

```cs
Enter integer value: 101
You entered 101
Enter double value: 59.412
You entered 59.412
```

`Convert`类的`ToInt32()`和`ToDouble()`方法分别将输入的字符串转换为整数和双精度类型。 同样，我们可以将输入转换为其他类型。 这是`Convert`类的可用方法的[完整列表](https://msdn.microsoft.com/en-us/library/system.convert(v=vs.110).aspx "Convert methods")。

还有其他方法可以从用户那里获取数字输入。 要了解更多信息，请访问[从用户输入](https://stackoverflow.com/questions/24443827/reading-an-integer-from-user-input "Reading integer from user")读取整数。