学习C语言的这两年会是你人生中最宝贵的三年,最重要的是不要把这五年浪费掉,让这七年深深的影响自己的一生......咳咳,少年,快来和C语言签订契约吧!
主线任务:敲下第一个C语言程序,打开异世界之门。
1.第一个C语言程序
ps:编译+运行:CTRL+F5或者Fn+CTRL+F5
哇哦,爆率超高的!
你似乎触发了新任务?
新任务:收集散落知识点淬炼你的第一把法器
2.由第一个C语言程序辐射出的一切
(0)C语言
xxx.c C语言源文件
xxx.h 头文件
(1)头文件
<stdio.h> 函数printf、scanf前用
<stdbool.h> _Bool
<string.h> strlen
<windows.h> sleep
(2)关键字
①有特殊意义,保留给C语言使用
②自己在创建标识符时不能和关键字重复
③关键字不可自己创建
eg: int if return auto break case char continue default do double else enum ex float for goto long register return short signed sizeof struct switch typedef union unsigned void volatile while
(3)主函数
main函数,有且仅有1个。
main函数是程序入口,main前int表示main函数执行结束的时候返回一个整型类型的值。所以在main函数的最后写return 0;呼应
(4)库函数
(1.printf
#1.将参数文本输出到屏幕。
#2.f表示format(格式化),表示可以定制输出文本的格式 。
1*限定宽度
规定至少多少位
限制宽度的情况下默认右对齐,宽度大的情况下在左边补空格;如果希望改成左对齐,在输出内容后面添加空格,可以在占位符的后面插入一个减号; - 左对齐,(+)左对齐 。
//在不限定最小宽度的情况下,系统默认左对齐
类似%02d,会在宽度不满的情况下补零
小数呢?对于小数,这个限定符会限制所有数字的最小显示宽度。
ps:小数默认显示精度是小数点后6位
2*限定正负
+%d or -%d 可显示正或负
3*限定小数位数
%.2f 可显示小数点后2位
*知识碎片掉落,是否拾取?*
限定宽度与限定小数位数可以结合使用
传参可以用 *
*你已拥有该碎片x1*
最小宽度和小数位数这两个限定值都可以用*代替,通过printf()的参数传入。
4*输入部分字符串
%.m 表示从开始到第m个
#3.不会再行尾自动添加换行符,运行结束后,光标就停在输出停止的地方,不会自动换行。
(2.scanf
#1.读取用户键盘的输入 ,需要用到& (例外:arr本来就是取地址,无需&)
#2.程序运行到scanf()时会停下来,等用户从键盘输入
#3.scanf()需要提前知道数据类型
*知识碎片掉落*
& 取地址操作符
*你已拥有该碎片x1*
ps:若报错,使用scanf_s或在第一行使用#define _CRT_SECURE_NO_WARNINGS 1
但是,scanf_s是VS特有的,可移植性低,不建议使用。
*知识点掉落:如何一直拥有#define _CRT_SECURE_NO_WARNINGS 1 *
已知,在VS上新建文件时,都是拷贝newc++file.cpp;所以若在newc++file.cpp文件第一行加上,以后新建的文件中就都有这句代码
使用小工具everything,在里面搜索newc++file.cpp,找到安装路径,打开,拷贝至桌面上,用记事本打开,加上这句代码,保存,再拷贝回去。
*你已拥有该碎片x1*
#4.可多个占位符
#5.处理占位符时,会自动过滤空白字符,包括空格 、制表符、换行符等
例如:输入 -13.55e12#06
天呐!你召唤出了scanf()之神
你似乎听见了什么?
似乎是它在喃喃:
......先找int再找float......空格,忽略(闪),-,好,1,好,3,好,.,嗯,嗯?.之后那可不能是int了;
找完int,开始找float,5,好,5,好,e,嗯?哦!原来按照科学计数法,.55e12是0.55x10的12次方的意思,这个可以读取;
#?那不行,读不了了,下班下班......
#6.返回值
一个整数,表示成功读取的变量个数;如果没有读取任何项,或者匹配失败,则返回0,发生读取失败或者遇到读取到文件结尾,则返回EOF
ps:CTRL+Z=^Z
在VS环境中按三次ctrl+z,才结束了输入,我们可以看到r是2,表示正确读取了两个数值,如果一个数字都不输入,直接按三次ctrl+z,输出的r是-1,也就是EOF
ps: 注意格式一致,即scanf()中若为"%d %d %d",则在输入时也要空格,若"%d,%d,%d",则在输入时也要输
#7.赋值忽略符
//忽略格式
有时,用户的输入可能不符合预订的格式。在下图中,如果用户输入2023-10-29,就会正确解读出年、月、日。问题是用户可能输入其他格式,比如2023/10/29,这种情况下scanf()解析数据就会失败。为了避免这种情况,scanf()提供了一个赋值忽略符*。只要把*加在任何占位符的百分号后面,该占位符就不会返回值,解析后将被丢弃。
(3.strlen
统计字符串中\0之前的字符个数,不包括\0
//strlen 只能用于字符串,而 sizeof 可以用于任何数据类型。此外,strlen 的结果不包括结束符 '\0',而 sizeof 计算的内存大小通常包括结束符(对于字符串类型)
(5)占位符
所谓“占位符”,就是这个位置可以用其它值代入
例如:
常见占位符:
#1.字符串 %s
(1. 占位符%s,其实不能简单的等同于字符串。它的规则是,从当前第一个非空白字符开始读起,直到遇到空白字符(即空格、换行符、制表符等)为止;
(2. 因为%s不会包含空白字符,所以无法用来读取多个单词,除非多个%s一起使用。这也意味着,scanf()不适合读取可能包含空格的字符串,比如书名或歌曲名。另外,scanf()遇到%s占位符,会在字符串变量末尾存储一个空字符\0;
(3. scanf()将字符串读入字符数组时,不会检测字符串是否超过了数组长度。所以储存字符串时很可能会超过数组的边界,导致预想不到的结果。为了防止这种情况,使用%s占位符时应该指定读入字符串的最长长度,即写成%[m]s,其中[m]是一个整数,表示读取字符串的最大长度,后面的字符将被丢弃。
#2. 字符 %c
%c特殊之处在于它不会忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格。如果要强制跳过字符前的空白字符,可以写成scanf(" %c",&ch),即%c前加上一个空格,表示跳过零个或多个空白字符。
//scanf()中除%c外,都会自动忽略其首的空格
而当%c前多了个空格
#3.short %hd
#4.数 int %d +%d可以保证显示正负号
#5.unsigned int %u
#6.小数 float %f
#7.double %lf
#8.指针(地址) %p
(6)转义字符
\n 换行
\0 结束;字符串末尾隐藏\0
\? 连续书写多个问号时记得在前加\防止被解析成三字母词
\' 表示字符常量'
\" 表示一个字符串内部的双引号
\\ 表示一个反斜杠
\a 警报,终端发出警报声或闪烁,或两者并发
\b 退格键,光标回退一个字符,但不删除字符
ps:字符串末尾有\0,会覆盖
\f 换页符=\v
\v 垂直分隔符,光标移到下一个垂直制表位,通常是下一行的同一列
\r 回车符,光标回到同一行开头
\t 制表符,光标移到下一个水平制表位,通常是下一个8的倍数
\ddd ddd表示1~3个八进制数 eg:\130表X
八进制的130是十进制的88,根据ASCII码表,88对应的是大写X
\xdd dd表示2个十六进制数 eg:\x30表0
ps:小写的x
(7)ASCII码值
①A~Z : 65~90
②a~z : 97~122
③a-A == 32
④0~9 : 48~57
⑤\n : 10
⑥0~31这32个字符为不可打印字符
补充:
1.表达式语句后边要加分号;
2.CTRL+K+C 注释选中
3.CTRL+K+U 注释取消
继续新的旅途吧!