基于win10,启用wsl调用乌班图模块,想调试需要安装gcc,安装前需进行,可以考虑使用清华源。
sudo apt update
sudo apt install gcc
cursor编写c程序,运行方法为gcc 2.c,也可以gcc 2.c -o hello 后面可以是任意命名,-o意为输出,不加会输出a.out文件,通过./运行即可,如./a.out ./hello等。
stdio.h是标准库,需声明,如#include(stdio.h)
如需加注释之类,可以通过/* sdasd */来做,
几个比较常用的,有\n换行,
C 语言中常用的循环结构有三种:
while循环
while (条件) {
// 循环体
}
for循环
for (初始化; 条件; 更新) {
// 循环体
}
| 类型 | 典型字节数 | 主要用途 | 取值范围(有符号) |
|---|---|---|---|
| char | 1 | 字符/小整数 | -128 ~ 127 |
| short | 2 | 小范围整数 | -32768 ~ 32767 |
| long | 4 或 8 | 大范围整数 | -2,147,483,648 ~ 2,147,483,647 (4字节) |
| double | 8 | 高精度小数 | 约 ±1.7E-308 ~ ±1.7E+308 |
在 C 语言中,写 100000L 这种形式,最后加的那个大写 L,表示这个常量是 long 类型(长整型常量)。
详细解释
- 默认情况下,像 100000 这样的数字常量在 C 语言里是 int 类型。
- 如果你写 long l = 100000;,编译器会把 100000 当作 int 类型,然后赋值给 long 类型的变量,通常没问题,但有些情况下你可能需要明确告诉编译器“这是 long 类型的常量”。
- 加上 L 或 l,比如 100000L 或 100000l,就表示这是一个 long 类型的整数常量。
| 格式符 | 说明 | 适用类型 | 示例输出 |
|---|---|---|---|
| %d | 十进制有符号整数 | int | 123, -456 |
| %u | 十进制无符号整数 | unsigned int | 123, 456 |
| %ld | 长整型(long)整数 | long | 1234567890 |
| %lu | 无符号长整型整数 | unsigned long | 1234567890 |
| %hd | 短整型(short)整数 | short | 12345 |
| %f | 浮点型(float, double) | float, double | 3.14, -0.001 |
| %lf | 双精度浮点型(double) | double | 3.1415926 |
| %c | 单个字符 | char | A, b, 1 |
| %s | 字符串 | char[] | hello, world |
| %x | 十六进制整数(小写字母) | int, unsigned | 7b, ff |
| %X | 十六进制整数(大写字母) | int, unsigned | 7B, FF |
| %o | 八进制整数 | int, unsigned | 173, 377 |
| %% | 输出一个百分号 | 无 | % |
| %p | 指针地址 | 指针类型 | 0x7ffee3bff618 |
for 循环后面加不加分号,含义完全不同!
1. 不加分号(推荐写法)
for (fahr = 300; fahr >= 0; fahr = fahr - 20)
printf("%3d %6.1f\n", fahr, 5*(fahr-32.0)/9);
- 这种写法表示:for 循环控制 printf 这一行,每次循环都会执行一次 printf。
- 这也是你想要的效果。
2. 加分号(不推荐,通常是错误)
for (fahr = 300; fahr >= 0; fahr = fahr - 20);
printf("%3d %6.1f\n", fahr, 5*(fahr-32.0)/9);
- 这种写法,for 循环后面有一个分号,表示 for 循环的循环体是一个“空语句”。
- 也就是说,for 循环什么都不做,只是让 fahr 变化,循环结束后才执行 printf。
- 结果是:只会输出一次,输出的是循环结束后的 fahr 的值,而不是你想要的表格。
3. 多条语句时
如果 for 循环后面有多条语句,应该用大括号 {} 包起来:
for (fahr = 300; fahr >= 0; fahr = fahr - 20) {
printf("%3d %6.1f\n", fahr, 5*(fahr-32.0)/9);
// 其他语句
}
总结
- for 循环后面不要随便加分号!
- 如果只跟一条语句,不加分号,直接写那条语句。
- 如果有多条语句,用大括号 {} 包起来。
- 加了分号就变成空循环了,通常不是你想要的效果。
!= 的含义
- != 是一个比较运算符,它的意思是“不等于”(Not Equal To)。
- 所以 while (c != EOF) 这句代码的意思就是:当变量 c 的值不等于 EOF 时,就执行循环。
详细解释
- ! (逻辑非):单独的 ! 是“逻辑非”运算符,用来取反一个布尔值(真或假)。例如,如果一个条件是“真”,! 之后就变成“假”。
- == (等于):两个等号 == 是“等于”的比较运算符。例如 c == EOF 判断 c 是否等于 EOF。
- != (不等于): ! 和 = 组合在一起,就成了“不等于”。c != EOF 就是判断 c 是否不等于 EOF。
您遇到的问题很典型,也是初学者经常会困惑的地方。直接在键盘上敲击 E、O、F 三个字母是无法让程序退出的。原因是,程序代码中的 EOF 并不是指’E’、’O’、’F’这三个字符的组合,而是一个由操作系统定义的、用来表示“输入流已结束”的特殊信号。getchar() 函数在接收到这个信号后,会返回一个特殊的值(在stdio.h中被定义为 EOF,通常是-1),这个值不对应任何一个实际的字符。
- 在 Windows 系统上: 在新的一行按 Ctrl+Z,然后再按 Enter。
- 在 Linux 或 macOS 系统上: 在新的一行按 Ctrl+D。