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:会员注册信息回执⭐
编写一个程序,向控制台输出用户注册成功后的信息回执。 输出内容分为三个区块:标题区、信息区、声明区。 要求:
- 三个区块之间各用一个空行隔开
- 每个区块内部每项占一行
- 信息区内的“电子邮箱”和“注册日期”之间也要用空行隔开
输出效果:
===== 注册成功 =====
用户名:山月
电子邮箱: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:字母密钥生成器 ⭐⭐⭐
题目描述: 编写控制台应用程序。要求:
- 提示用户连续输入三个字母(中间不留空格,输入完直接按回车)。
- 输出三个字母的ASCII 码,形成一串“数字密钥”。
- 严格按照下面的格式编写 运行示例:
请输入三位字符密码(例如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,就能把数字连起来