1. 入门
到现在为止,我们写的程序都像收音机:它们只会说话,根本不理你说啥。这样肯定不行啊!大多数程序的目标——就是帮用户做点有用的事。所以经常需要让用户能从键盘输入点东西。
比如说:
- 计算器等着你输入数字和操作符。
- 网站表单要你填姓名、邮箱和地址,好处理你的申请。
- 电脑游戏会问玩家的名字。
今天我们要给我们的应用装个麦克风!或者说耳朵,随你喜欢 :) 准备好了吗?走起!
2. 认识Console.ReadLine()
Console.ReadLine()——这是个函数(或者说“命令”),让程序能拿到用户在键盘上输入的数据。
当程序运行到Console.ReadLine()这行时,程序就会停下来……耐心等着你输入点啥,然后按下Enter。你在按Enter前输入的所有内容都会被当成一行文本。这行文本会返回给程序——就像用户通过窗口递给你一张纸条。
基础例子
// 问下用户名字,然后打个招呼
Console.WriteLine("你叫什么名字?");
string userName = Console.ReadLine(); // 这里程序等你输入!
Console.WriteLine("你好, " + userName + "!");
怎么回事:
- 屏幕上出现:你叫什么名字?
- 你输入,比如安德烈,然后按Enter。
- 变量userName拿到"安德烈"这个值。
- 屏幕上输出:你好, 安德烈!
注意:不管用户输入啥,Console.ReadLine()返回的永远是字符串(类型string)。就算用户输入的是数字,也还是字符串!
3. 例子
来看看Console.ReadLine()实际怎么用。
例子1:输入用户名
Console.WriteLine("请输入你的名字:");
string name = Console.ReadLine();
Console.WriteLine("欢迎, " + name + "!");
例子2:一行里输出结果
用+操作符,你可以直接把文本和输入结果拼一起。
Console.Write("你最喜欢的颜色: ");
string color = Console.ReadLine();
Console.WriteLine("酷!你最喜欢的颜色是 " + color + "。");
这个例子里用的是Console.Write(没有换行),这样用户输入会紧跟在问题后面。
例子3:连续输入多个内容
来做个小问卷:
Console.Write("你叫什么? ");
string name = Console.ReadLine();
Console.Write("你几岁了? ");
string age = Console.ReadLine(); // 现在还是字符串
Console.WriteLine("你叫 " + name + ",你 " + age + " 岁。");
你会看到:
你叫什么? 维卡
你几岁了? 23
你叫 维卡,你 23 岁。
4. 输入数字数据:类型转换
这里有个新手常踩的坑! Console.ReadLine()永远返回字符串,就算用户输入123。
如果你想拿到数字,得把字符串转成你想要的数字类型(比如int)。C#里可以用转换方法,比如int.Parse()或者Convert.ToInt32()——我们上节课讲过这个。
例子:问年龄
Console.Write("你几岁了? ");
string input = Console.ReadLine(); // input = "27",比如说
int age = int.Parse(input); // 把"27"字符串转成数字27
Console.WriteLine("一年后你就 " + (age + 1) + " 岁啦");
如果用户输入的不是数字,程序会报错(FormatException)。以后我们会学更靠谱的写法,但现在这样练习够用了。
5. 你肯定会遇到的错误
忘了转换成数字:
直接把Console.ReadLine()的值当数字用,没转换。
string input = Console.ReadLine();
int sum = input + 5; // 错误!字符串不能和数字直接加。
应该先转成int:
int sum = int.Parse(input) + 5;
忘了声明变量:
name = Console.ReadLine(); // 错误!变量name没声明。
得先声明:string name = Console.ReadLine();
输入和输出顺序搞反了:
新手经常犯很傻的错。其实老手也会,只不过脸不红心不跳 :)
string name = Console.ReadLine();
Console.WriteLine("请输入名字: " + name); // 应该先问,再读输入!
正确顺序:
Console.Write("请输入名字: ");
string name = Console.ReadLine();
Console.WriteLine("你好, " + name);
有用的小提示
就算你用Console.ReadLine()没输出问题(比如直接string x = Console.ReadLine();),程序也会等你输入。但用户根本不知道要输啥!所以一定要用Console.Write()或者Console.WriteLine()给他个明确的提示。
GO TO FULL VERSION