入门 · 输入输出
打个招呼
在这之前都是打印固定文字。现在输出取决于用户输入了什么 —— 这一刻,程序从一张海报变成了一个工具。
一句话答案用 <code>cin >> name</code> 读进 <code>char</code> 数组,然后打印 <code>Hello, </code>、名字和换行。
题目
输入: 一个单词,1 到 20 个拉丁字母,不含空格。
输出: 一行:Hello, NAME! —— 逗号和感叹号都要,格式照抄。
样例:
| 输入 | 输出 |
|---|---|
Ada | Hello, Ada! |
Linus | Hello, Linus! |
判题逐字符比对。少一个逗号或少一个 !,哪怕单词都对,也算错。
你的解答
「运行我的输入」用的自定义输入
判题在浏览器本地运行。死循环会在 3 秒后被自动中断 —— 但还是确保每个循环都有出口。代码随打随存。
卡住了?提示
提示 1 — cin 读进变量里
cin >> name; 等一个以空白分隔的词并把它存下来。箭头指向变量 —— 之后不需要再赋值,读入就是赋值。
提示 2 — 三块,一行
输出由三块组成:字面量 "Hello, "、变量 name、字面量 "!"。用 << 串起来,最后加 endl。打印 name 不用引号,因为它是 char 数组,cout 知道怎么按文本输出。
提示 3 — 为什么不用 int
因为名字是文本,不是数字。本引擎里文本住在 char 数组里 —— 没有 std::string。声明得比最长允许的单词大一点(20 个字母用 25 格,给结尾的零留位)。
题解(先自己试试!)
#include <iostream>
using namespace std;
int main() {
char name[25];
cin >> name;
cout << "Hello, " << name << "!" << endl;
return 0;
}
这就是完整的输入输出回路:读一个值、用它、打印结果。本站其余所有题目,都是这个模式中间多了一些算术。下一题:读两个数并打印它们的和 —— 两数求和。
深度解析
为什么这样做对
这个程序恰好具备所有程序的三部分:取输入、做变换(这里是「不做」)、产生输出。cin >> name 存下这个 token;cout << "Hello, " << name << "!" 用字面量和变量拼出整行。别的什么都不需要。
代价
时间空间都是 O(1) —— 读一个 token、写一行,与长度无关(在限制范围内)。
常见错法
- 用
cin >> name读进一个int—— 名字是文本,需要char数组(或本引擎没有的字符串类型)。 - 漏掉标点。判题逐字符比对:
Hello, Ada少了!就是错答。 - 数组开得太小。二十个字母加结尾零至少要 21 格,开 25 比较舒服。
下一步
在读和打印之间插入算术:两数求和。
记住这两句
- 三部分:读、变换、打印。这道题的变换是空的。
cin >> x读一个以空白分隔的 token —— 箭头指向变量。
🐞 这段是错的 —— 点开,亲手让它挂一次
把名字打了两遍 —— 少了问候语那半句
#include <iostream>
using namespace std;
int main() {
char name[25];
cin >> name;
cout << name << name << endl; // bug: no greeting text
return 0;
}