Kodewick
第 1 课,共 30 课目录

你好,世界!

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

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

main.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 一样。

编译器很严格。少一个分号,它就拒绝编译,并告诉你哪里不对:

main.c
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 里的语句从上往下,一条一条地跑,每条语句以分号结尾。点单步,可以看着它一行一行地走。

main.c
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 里也可以有好几个 \n:

main.c
1#include <stdio.h>2 3int main(void) {4    printf("早上好\n晚上好\n");5    printf("\n");6    printf("上面空了一行\n");7    return 0;8}
输出
早上好
晚上好

上面空了一行

特殊字符

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

写得到
\n换行
\t制表符(跳到下一个对齐的位置)
\"双引号本身
\\反斜杠本身
main.c
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

注释

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

main.c
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;。

main.c
1#include <stdio.h>2 3int main(void) {4    printf("开始\n");5    return 0;6    printf("这一行不会跑\n");7}
输出
开始

return 之后程序就结束了,所以最后一个 printf 没有显示。

练一练

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

练习 1

第一个程序

让程序显示 Hello, C!,然后换行。

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

一个 printf,两行

只用一个 printf,显示下面两行。

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

修好它

这段程序编译不过。改好它,让它显示 他说:"编译通过了"。

要显示
他说:"编译通过了"
exercise3.c
1#include <stdio.h>2 3int main(void) {4    printf("他说:"编译通过了"\n");5    return 0;6}
输出
点「运行」或按 Ctrl+Enter

这一课学会了

  • C 程序从 main 开始跑;#include <stdio.h> 拿进来 printf。
  • C 是编译型语言:先编译,再运行。编译错误里有行号和原因,先看第一条。
  • 每条语句以分号结尾。
  • printf 不会自己换行,要写 \n;\t、\"、\\ 表示特殊字符。
  • // 和 /* */ 是注释;return 0; 表示程序顺利结束。