Skip to main content

11.数据的输入与输出

第 11 集 数据的输入与输出

开场

程序的运行离不开数据。

只会输出、不会输入的程序,算不上真正的软件。

到目前为止,我们写的所有示例程序,有一个共同的问题:就是只会输出信息,不会输入信息。

今天,我就带大家打破僵局,通过四个方法,

让你的程序真正和用户产生互动,正式跨入 “人机交互” 的大门。

(此处插入 5 秒LOGO 动画)

第 11 集 数据的输入与输出 内容提示

什么是输入与输出

  • 输出方法详解
  • 输入方法详解

一、什么是输入与输出

在 C#程序中

输入,就是把数据从程序外部送到程序内部的过程。

数据的来源有很多,比如

  • 可以来自键盘输入
  • 也可以来自某个文本文件
  • 还可以是通过网络接收到的数据

输出正好反过来。

输出,就是把数据从程序内部输出到外部的过程。

可以输出到

  • 控制台屏幕
  • 也可以保存到指定的文件里
  • 还可以通过网络发送出去
  • 甚至直接打印到纸上

总之,输入就是把数据送进程序,输出就是把数据送出程序。

对于初学者来说,

  • 最常见的输入就是来自键盘的输入
  • 最常见的输出就是输出到控制台

今天,我们就来逐一认识在控制台应用程序中,处理输入输出最常用的四个方法。

二、 输出方法详解

Console.WriteLine()Console.Write()
用途输出数据并换行输出数据不换行。
语法Console.WriteLine(输出的数据);Console.Write(输出的数据);
输出的数据: 字符串、整数、小数、字符、变量等输出的内容:字符串、整数、小数、字符、变量等
输出的数据可省略,该方法至少会输出一个换行。输出的内容不可省略,否则报错;
返回值无返回值无返回值

首先,我们从最熟悉的“输出”开始。请先看示例:

例 11.1

Console.Write("A");
Console.Write("B");
Console.WriteLine("C");
Console.WriteLine("D");

根据题意,可以使用Console.Write()方法先输出字母A,再输出字母B

然后使用Console.WriteLine方法输出字母C,最后输出字母D,点击执行

ABC
D

你能看到:字母A、B、C 连续输出在同一行,而字母 D 自动跑到了下一行。为什么会这样?

原因就在于,我们刚才用了两种不同的输出方法。

C# 提供了两个最常用的控制台输出方法:

  • Console.Write() 方法
  • Console.WriteLine() 方法

它们有一个共同点:名字里都有 Write 一词。

Write 的意思就是向控制台写入数据。

所以,这两个方法都可以把数据输出到控制台。

二者真正的区别是一个有Line,一个没Line

Line的意思就是一行。

因此:Console.WriteLine()方法的用途就是:“输出数据并换行

说白了,输出的是:数据+换行符。

而:Console.Write()方法的用途是:输出数据不换行。

因此,ABC并排在同一行。输出字母 C 后自动换行。 最后输出字母 D 时,自然就出现在了下一行。

奇奇:村长,我有个问题:这两个方法的小括号里,能放变量吗?

村长:当然可以!这两个方法的参数非常灵活。在小括号里,你不仅可以输出字符串、字符、整数、小数、布尔值这些常见的数据,也可以直接输出变量,甚至是表达式。

我们来看一段代码:

Console.Write("Hello World");
Console.WriteLine("Hello World");
Console.Write('A');
Console.WriteLine('A');
Console.Write(100);
Console.WriteLine(100);
Console.Write(3.14);
Console.WriteLine(3.14);
Console.Write(true);
Console.WriteLine(true);
string name = "奇奇";
int age = 6;
Console.Write(name + "今年");
Console.WriteLine(age + "岁。")

奇奇:哦,我明白了。那照这么说,这两个方法除了“是否换行”以外,其他用法都一样咯?

村长:嗯……差不多,但也不完全是。还有一个小区别,我们接着往下看。

例 11.2 输出唐诗《凉州词》,要求:1.标题与正文之间使用空行隔开;2. 依次输出四句诗。格式如下

《凉州词》(唐)王翰

葡萄美酒夜光杯,欲饮琵琶马上催。
醉卧沙场君莫笑, 古来征战几人回。

代码

Console.WriteLine("《凉州词》 (唐)王翰");
Console.WriteLine();
Console.Write("葡萄美酒夜光杯,");
Console.WriteLine("欲饮琵琶马上催。");
Console.Write("醉卧沙场君莫笑,");
Console.WriteLine("古来征战几人回。");

运行后,对于WriteLine()方法,小括号里的参数可省略,省略后,该方法至少会输出一个换行。所以,你可以把不带参数的 WriteLine()方法当做换行符使用。

Console.Write();

对于Write()方法,小括号里的参数则不可省略,因为Write()方法必须要告诉程序:到底要输出什么数据。否则编译器会直接报错。

最后,再说一下返回值。

WriteLine() 方法和 Write() 方法都没有返回值。因为它们的任务只有一个:把内容输出到控制台,不需要返回值。

三、输入方法详解

C#提供了两个从控制台读取键盘输入的方法:Console.ReadLine()和Console.Read()方法。

Console.ReadLine()Console.Read()
用途读取数据,一次读一行字符读取数据,依次读一个字符
语法Console.ReadLine( );Console.Read( );
无参数无参数
返回值字符串整数
注意事项

(1.用途)从字面来看,这两个方法的名字中都有Read一词,Read就是读取数据的意思,所以,这两个方法都表示读取数据。

区别是一个有Line,一个没Line,有Line就表示“一次读一行字符”,请看示例:

例 11.3 根据用户输入的名字(比如:张三),向控制台输出问候语:“你好!张三。”。

// 输出提示信息
Console.WriteLine("请输入名字:");
// 定义变量 name 存储用户的输入
string name = Console.ReadLine();
// 输出问候
Console.WriteLine("你好!" + name );

这道题的目标很简单:先让用户输入名字,然后程序输出“你好,某某某!”。所以

第一步:先输出提示信息

告诉用户输入什么,否则用户根本不知道要干嘛

Console.WriteLine("请输入你的名字:");

第二步:存储用户输入的名字(3.返回值 2.语法参数 )

string name = Console.ReadLine();

这里需要特别注意,通常情况下,我们必须声明一个string 类型的变量,来存储readLine()方法执行后,读取到的名字。

因为ReadLine()方法执行后,无论用户输入什么,即使输入数字 123,ReadLine()方法都会以字符串(string) 形式返回数据。

ReadLine()方法直接调用即可,小括号里什么都不用写,因为它永远没有参数。

最后一步,输出结果,使用加号运算符,把问候语和变量拼接起来

Console.WriteLine("你好," + name + "!");

点击保存,点击执行,在控制台窗口中,首先提示:

请输入你的名字:

这时,程序会暂停,等待你输入。

当输入名字奇奇,并按下回车键后,ReadLine()方法会读取到你输入的全部内容,然后保存到 name 变量中。

最后,程序输出问候语:

你好,奇奇!

整个过程可以概括为:提示输入 → 读取输入 → 输出结果

这道题虽然简单,但它教会了我们如何与用户进行交互。 以后无论做多复杂的项目,最核心的骨架也离不开这三步。

Console.Read()

( 1.用途)Console.Read() 方法的名字里没有 Line,它的作用是:依次读取一个字符。

什么意思呢?

就是说,每调用一次 Read() 方法,它就会按顺序从输入流中拿走一个字符。第一次调用拿第一个,第二次调用拿第二个,依此类推。

请看示例:

例 11.4 编写程序,在控制台一次性输入任意三个字母(比如 ABC),然后逐个输出这些字母对应的 ASCII 编码。

Console.Write("请输入任意三个字母并按回车:");
int first = Console.Read(); // 读取第1个字符
int second = Console.Read(); // 读取第2个字符
int third = Console.Read(); // 读取第3个字符

Console.WriteLine("第1个字符的 ASCII 码是:" + first);
Console.WriteLine("第2个字符的 ASCII 码是:" + second);
Console.WriteLine("第3个字符的 ASCII 码是:" + third);

我们一步步来看:

第一步:输出提示信息

告诉用户输入任意三个字母,并按回车键结束输入。

第二步:读取用户输入

这里有个关键点需要特别注意——

Console.Read() 方法返回的并不是读取到的字符本身,而是一个 int 类型的值,这个值表示该字符对应的 ASCII 编码。

所以,我们用 int 类型的变量来存储:

  • first 存放第一次调用 Read() 读到的字符,如果用户输入 ABC,那 first 里存的就是字母 A 的编码;
  • second 存的是第二次调用读到的字符,也就是 B 的编码;
  • third 存的是第三次调用读到的字符,也就是 C 的编码。

第三步:输出结果

最后,我们把这三个 ASCII 编码值输出到控制台。

点击保存,点击执行,在控制台窗口中会看到:

第1个字符的 ASCII 码是:65
第2个字符的 ASCII 码是:66
第3个字符的 ASCII 码是:67

注意,返回的是字母对应的 ASCII 编码值,而不是字符本身。如果你想把编码值转回字符,需要强制转换数据类型——这个我们会在以后的课程中专门讲解。

讲到这里,大家应该能看出来:

ReadLine() 一次读取一整行,这是我们平时最常用的输入方式;而 Read() 一次只读一个字符,对初学者来说,了解它的原理就够了。在实际开发中,Console.Read() 几乎派不上用场。

村长小贴士

  • Write不换行,WriteLine换行;
  • ReadLine读一行,Read读一个键。

记住这句口诀,今天的内容你就没白看。

总结

从今天开始,你写的程序终于能够接收用户的输入了。

这就是人机交互的第一步。

最后提醒大家:视频下方有本节课的课后练习题,记得去练练手。

本期视频就到这里。我是村长。

听懂不算会,敲出来才算。

如果你觉得这个视频对你有帮助,记得点赞、收藏、关注。

感谢观看,我们下期见。

练习题

题目1:会员注册信息回执⭐

编写一个程序,向控制台输出用户注册成功后的信息回执。 输出内容分为三个区块:标题区、信息区、声明区。 要求:

  1. 三个区块之间各用一个空行隔开
  2. 每个区块内部每项占一行
  3. 信息区内的“电子邮箱”和“注册日期”之间也要用空行隔开

输出效果:

===== 注册成功 =====

用户名:山月
电子邮箱:shanyue@example.com

注册日期:2026-07-11

※ 请妥善保管您的账号信息
※ 本邮件为系统自动发送,请勿回复

===== 感谢注册 =====

题目2:自我介绍生成器 ⭐

编写一个控制台程序,依次提示用户输入自己的姓名、所在城市和爱好,然后整合信息成一段完整的自我介绍,输出到控制台。

运行示例:

请输入您的姓名:林溪
请输入您所在的城市:杭州
请输入您的爱好:摄影

========== 自我介绍 ==========
大家好,我叫林溪,来自杭州,我喜欢摄影!
很高兴认识大家!
================================

题目3:计算机知识小测试 ⭐

考察点:Console.WriteLine() 与 Console.ReadLine() 配合使用 + 空行排版

题目描述:

编写一个控制台程序,模拟“计算机知识小测试”。程序依次向用户提出 3 个问题,用户在每道题下方输入答案。所有问题回答完毕后,程序输出结束语。

要求:严格参照下面的格式编写

运行示例:

======== 计算机知识测试 ========

1. 现代计算机之父是谁?
请输入你的答案:冯·诺依曼

2. 数据除了进入内存,还可能进入哪里?
请输入你的答案:硬盘

3. 世界上第一台电子计算机叫什么名字?
请输入你的答案:ENIAC

================================
测试完成!感谢参与!
================================

参考代码框架:

Console.WriteLine("======== 计算机知识测试 ========");
Console.WriteLine(); // 标题下方空一行

// 第一题
Console.WriteLine("1. 现代计算机之父是谁?");
Console.Write("请输入你的答案:");
string answer1 = Console.ReadLine();
Console.WriteLine(); // 题与题之间空一行

// 第二题
Console.WriteLine("2. 数据除了进入内存,还可能进入哪里?");
Console.Write("请输入你的答案:");
string answer2 = Console.ReadLine();
Console.WriteLine(); // 题与题之间空一行

// 第三题
Console.WriteLine("3. 世界上第一台电子计算机叫什么名字?");
Console.Write("请输入你的答案:");
string answer3 = Console.ReadLine();

Console.WriteLine(); // 结束语之前空一行
Console.WriteLine("================================");
Console.WriteLine("测试完成!感谢参与!");
Console.WriteLine("================================");

题目4:字母密钥生成器 ⭐⭐⭐

题目描述: 编写控制台应用程序。要求:

  1. 提示用户连续输入三个字母(中间不留空格,输入完直接按回车)。
  2. 输出三个字母的ASCII 码,形成一串“数字密钥”。
  3. 严格按照下面的格式编写 运行示例:
请输入三位字符密码(例如KEY)并回车:WIN

正在生成您的数字安全密钥...
您的最终数字密码为:877378

(注:W的ASCII是87,I是73,N是78,连起来就是877378)

Console.Write("请输入三位字符密码(例如KEY)并回车:");
int c1 = Console.Read();
int c2 = Console.Read();
int c3 = Console.Read();

Console.WriteLine("\n正在生成您的数字安全密钥...");
Console.Write("您的最终数字密码为:");
Console.Write(c1);
Console.Write(c2);
Console.WriteLine(c3); // 连续使用 Write 不换行输出 int,就能把数字连起来