你好,世界!
你的第一个 C 程序只做一件事:在屏幕上显示一句话。这一页的每段代码都能直接在浏览器里编译、运行:点运行,改一改,再运行一次。
1#include <stdio.h>2 3int main(void) {4 printf("你好,世界!\n");5 return 0;6}
你好,世界!
比起别的语言,C 的第一个程序要多写几行。每一行是这样的:
| 部分 | 是什么 |
|---|---|
#include <stdio.h> | 把标准输入输出的工具拿进来,printf 就在里面。 |
int main(void) | 程序从 main 开始跑。每个 C 程序都有一个 main。 |
{ } | 花括号里是 main 要做的事。 |
printf("..."); | 把引号里的文字显示出来。\n 是换行。 |
return 0; | 告诉系统:程序顺利结束了。 |
编译是什么
C 是编译型语言:你写的代码先交给编译器(比如 gcc),翻译成电脑能直接执行的程序,然后才能运行。在这里,点运行时页面替你编译,结果和 gcc 一样。
编译器很严格。少一个分号,它就拒绝编译,并告诉你哪里不对:
1#include <stdio.h>2 3int main(void) {4 printf("少了分号\n")5 return 0;6}
main.c: In function 'main':
main.c:4:25: error: expected ';' before 'return'
4 | printf("少了分号\n")
| ^
| ;
5 | return 0;
| ~~~~~~先看第二行:main.c:4:25 是文件名、第 4 行、第 25 个字符;error: 后面说的是错在哪里。编译器还会指出该在哪里补上 ;。照着改好,再运行一次。
小技巧: 报错时先看第一条。后面的错误常常是第一条引起的。
一行一行地跑
main 里的语句从上往下,一条一条地跑,每条语句以分号结尾。点单步,可以看着它一行一行地走。
1#include <stdio.h>2 3int main(void) {4 printf("第一行\n");5 printf("第二行\n");6 printf("第三行\n");7 return 0;8}
第一行 第二行 第三行
换行要自己写
printf 不会自己换行。不写 \n,下一次 printf 会接着同一行往后写:
这段程序显示几行?
1#include <stdio.h>2 3int main(void) {4 printf("A");5 printf("B\n");6 printf("C\n");7 return 0;8}
printf("A") 后面没有 \n,所以 B 紧跟在 A 后面,显示 AB,然后换行。接着 C 自己一行。一共两行。
一个 printf 里也可以有好几个 \n:
1#include <stdio.h>2 3int main(void) {4 printf("早上好\n晚上好\n");5 printf("\n");6 printf("上面空了一行\n");7 return 0;8}
早上好 晚上好 上面空了一行
特殊字符
字符串里的反斜杠 \,加上后面一个字符,表示一个不好直接打出来的字符:
| 写 | 得到 |
|---|---|
\n | 换行 |
\t | 制表符(跳到下一个对齐的位置) |
\" | 双引号本身 |
\\ | 反斜杠本身 |
1#include <stdio.h>2 3int main(void) {4 printf("名字\t分数\n");5 printf("小林\t95\n");6 printf("他说:\"你好\"\n");7 printf("路径:C:\\code\n");8 return 0;9}
名字 分数 小林 95 他说:"你好" 路径:C:\code
注释
注释是写给人看的,编译器会跳过。// 到这一行结束是注释;/* 和 */ 之间的也是注释,可以跨好几行。
1#include <stdio.h>2 3int main(void) {4 // 先打个招呼5 printf("你好\n");6 /* 下面这一行先不跑:7 printf("再见\n");8 */9 return 0;10}
你好
main 和 return 0
程序从 main 的第一条语句开始,跑到 return 0; 结束。0 的意思是「一切正常」;在终端里运行时,别的程序可以看到这个数,知道它有没有出错。现在只要记住:每个程序都这样写,main 的最后写 return 0;。
1#include <stdio.h>2 3int main(void) {4 printf("开始\n");5 return 0;6 printf("这一行不会跑\n");7}
开始
return 之后程序就结束了,所以最后一个 printf 没有显示。
练一练
写好代码,点检查。提示随便看,实在想不出来再看答案。
第一个程序
✓让程序显示 Hello, C!,然后换行。
Hello, C!
1#include <stdio.h>2 3int main(void) {4 5 return 0;6}
一个 printf,两行
✓只用一个 printf,显示下面两行。
苹果 香蕉
1#include <stdio.h>2 3int main(void) {4 printf("苹果");5 return 0;6}
修好它
✓这段程序编译不过。改好它,让它显示 他说:"编译通过了"。
他说:"编译通过了"
1#include <stdio.h>2 3int main(void) {4 printf("他说:"编译通过了"\n");5 return 0;6}
这一课学会了
- C 程序从
main开始跑;#include <stdio.h>拿进来printf。 - C 是编译型语言:先编译,再运行。编译错误里有行号和原因,先看第一条。
- 每条语句以分号结尾。
printf不会自己换行,要写\n;\t、\"、\\表示特殊字符。//和/* */是注释;return 0;表示程序顺利结束。