Kodewick
第 1 课,共 30 课目录

你好,世界!

第 1 课,共 30 课 · 第 1 部分 · 起步 · 约 15 分钟

你的第一个 C++ 程序只做一件事:在屏幕上显示一行字。这一页的每段代码都能直接在浏览器里编译、运行:点运行,改一改,再运行一次。

main.cpp
1#include <iostream>2 3int main() {4    std::cout << "你好,世界!\n";5    return 0;6}
输出
你好,世界!

每一部分是做什么的:

部分是什么
#include <iostream>引入输入输出的工具,std::cout 就是其中之一。
int main()程序从 main 开始运行。每个 C++ 程序都有一个。
{ }花括号里是 main 要做的事。
std::cout << "...";把引号里的文字送到屏幕上。\n 是换行。
return 0;告诉系统:程序顺利结束了。

什么是编译

C++ 是编译型语言:代码先交给编译器(比如 g++),翻译成电脑能直接运行的程序,然后才运行。在这里点运行,页面会帮你编译,结果和 g++ 一样。

编译器很严格。少写一个分号,它就不肯编译,还会告诉你哪里不对:

main.cpp
1#include <iostream>2 3int main() {4    std::cout << "少了分号\n"5    return 0;6}
输出
main.cpp: In function 'int main()':
main.cpp:4:30: error: expected ';' before 'return'
    4 |     std::cout << "少了分号\n"
      |                              ^
      |                              ;
    5 |     return 0;
      |     ~~~~~~

看带 error: 的那一行:main.cpp:4:30 是文件名、第 4 行、第 30 列,error: 后面是哪里不对。编译器还指出了 ; 应该放在哪儿。改好再运行一次。

小技巧: C++ 的报错有时很长。先看第一个 error:,后面的常常是它连带出来的。

一行一行地跑

main 里的语句从上到下,一条接一条地运行,每一条以分号结尾。点单步,看它一行一行地走。

main.cpp
1#include <iostream>2 3int main() {4    std::cout << "第一行\n";5    std::cout << "第二行\n";6    std::cout << "第三行\n";7    return 0;8}
输出
第一行
第二行
第三行

cout 和 <<

std::cout 是输出流:用 << 送给它的东西都会显示到屏幕上。一条语句可以连着送好几样,数字也行:

main.cpp
1#include <iostream>2 3int main() {4    std::cout << "苹果:" << 3 << "\n";5    std::cout << "一共:" << 3 + 4 << "\n";6    return 0;7}
输出
苹果:3
一共:7

std::cout 不会自己换行。不写 \n,下一次输出就接在同一行后面:

先猜一猜

这段程序显示几行?

1#include <iostream>2 3int main() {4    std::cout << "A";5    std::cout << "B\n";6    std::cout << "C\n";7    return 0;8}

别人的代码里你还会看到 std::endl,它也会换行(并且马上把输出送出去)。这门课写 \n(从第 2 课起写成 '\n'),几乎所有地方都够用。

std:: 是什么

cout 属于标准库,标准库的名字都放在 std 里。std::cout 的意思是「std 里的那个 cout」。不写 std::,编译器就不认识这个名字:

main.cpp
1#include <iostream>2 3int main() {4    cout << "你好\n";5    return 0;6}
输出
main.cpp: In function 'int main()':
main.cpp:4:5: error: 'cout' was not declared in this scope; did you mean 'std::cout'?
    4 |     cout << "你好\n";
      |     ^~~~
      |     std::cout

g++ 还会提示怎么改:did you mean 'std::cout'?。很多教程在开头写 using namespace std;,后面就能省掉 std::。这门课每次都写 std:::程序大了不容易和别的名字撞车,也一眼看得出名字是从哪儿来的。

特殊字符

在字符串里,反斜杠 \ 加后面一个字符,表示一个不好直接打出来的字符:

你写得到
\n换行
\t制表符(跳到下一个对齐的位置)
\"双引号
\\反斜杠
main.cpp
1#include <iostream>2 3int main() {4    std::cout << "名字\t分数\n";5    std::cout << "小林\t95\n";6    std::cout << "她说:\"你好\"\n";7    std::cout << "路径:C:\\code\n";8    return 0;9}
输出
名字	分数
小林	95
她说:"你好"
路径:C:\code

注释

注释是写给人看的,编译器会跳过。从 // 到这一行末尾是注释;/* 和 */ 之间的也是,可以跨好几行。

main.cpp
1#include <iostream>2 3int main() {4    // 先打个招呼5    std::cout << "你好\n";6    /* 这一句先不要:7    std::cout << "再见\n";8    */9    return 0;10}
输出
你好

main 和 return 0

程序从 main 里的第一条语句开始,到 return 0; 结束。0 的意思是「一切顺利」,别的程序能看到这个数,知道它有没有出错。这门课的每个程序都这样写,main 最后是 return 0;。

main.cpp
1#include <iostream>2 3int main() {4    std::cout << "开始\n";5    return 0;6    std::cout << "这一行不会运行\n";7}
输出
开始

程序在 return 就结束了,所以最后一行什么也不显示。

练一练

写好代码,点检查。提示随便看,实在想不出来再看答案。

练习 1

第一个程序

让程序显示 你好,C++!,然后换行。

要显示
你好,C++!
exercise1.cpp
1#include <iostream>2 3int main() {4 5    return 0;6}
输出
点「运行」或按 Ctrl+Enter
练习 2

一条语句,两行字

只用一条 std::cout 语句,显示下面两行。

要显示
苹果
香蕉
exercise2.cpp
1#include <iostream>2 3int main() {4    std::cout << "苹果";5    return 0;6}
输出
点「运行」或按 Ctrl+Enter
练习 3

修好它:不认识的名字

这段程序编译不过。改好它,让它显示 价格:25。

要显示
价格:25
exercise3.cpp
1#include <iostream>2 3int main() {4    cout << "价格:" << 25 << "\n";5    return 0;6}
输出
点「运行」或按 Ctrl+Enter

这一课学会了

  • C++ 程序从 main 开始运行;#include <iostream> 引入 std::cout。
  • C++ 要先编译再运行。编译错误会给出行号和原因,先看第一个。
  • std::cout << ... 显示文字和数字;连着几个 << 就显示几样。
  • 输出不会自己换行,要写 \n;\t、\"、\\ 表示特殊字符。
  • 标准库的名字前面写 std::;// 和 /* */ 是注释;return 0; 表示一切顺利。