?️如果您觉得这篇文章对您有帮助的话
欢迎您分享给更多人哦
感谢大家的点赞收藏评论,感谢您的支持!!!
关于C语言一些容易遗忘点
首先,推荐大家使用VS2022的社区版本(集成开发环境,免费使用,非常方便)
VS2022安装教程
一.C语言常见概念
1.一些小问题
(1).C语言是一门编译型计算机语⾔C语言源代码都是⽂本⽂件,文本文件本⾝无法执行,必须通过编译器翻译和链接的链接,生成⼆进制的可执行文件才能执行
(2)每个 C语言程序不管有多少⾏代码,都是从 main 函数开始执⾏的, main 函数是程序的⼊⼝,
main 函数也被叫做:主函数。
main函数是程序的入口有且仅有一个 | |
---|---|
不管一个项目有多少.c文件,但是main函数只有一个,因为程序的入口只有一个 |
A-Z的ASCII码值为65—90,a-z为97-122,相差32 | |
---|---|
0-9的ASCII码值为48-57 | \n的为10 |
printf(“abc\0def”) | 打印的是abc到\0结束 |
char arr[ ]={‘a’,‘b’,‘c’}和char arr2[ ]="abc"完全不一样 | arr2是常量字符串数组,arr连\0都没有 |
2 注释
总之一句话:“ ”双引号里面的注释,#n以及任何东西都没用,都会被当成字符串
并且编译时注释会被替换成空格
//printf("hello/*world*/") 打印的就是hello/*world*/ //以及 /* */在括号里都没有用 包括#define #n也是#include <stdio.h>#define PRINTF(n,format) printf("the value of #n is"format,n)int main(){PRITFF(5,"%d");//the value of #n is5return 0;} 但是#n这样换到“”外边就可以了printf("the value of" #n "is"format,n)
二. C语言数据类型和变量
好多类似的都可以看课本我就不一一赘述了。
2.1:数据类型
sizeof 运算符的返回值,C 语言只规定是无符号整数,并没有规定具体的类型,⽽是留给
系统自己去决定, sizeof 到底返回什么类型。不同的系统中,返回值的类型有可能是
unsigned int ,也有可能是 unsigned long ,甚⾄是 unsigned long long ,
对应的 printf() 占位符分别是 %u 、 %lu 和 %llu 。这样不利于程序的可移植性。
因此:
C 语言提供了⼀个解决⽅法,创造了⼀个类型别名 size_t ,⽤来统⼀表⽰ sizeof 的返
回值类型。对应当前系统的 sizeof 的返回值类型,可能是 unsigned int ,也可能是
unsigned long long 。
2.2:printf函数的一些用法
首先printf是一个库函数要包含头文件 include<stdio.h>,下面的scanf也是相同的库函数库函数链接2.1.1:打印浮点数(限制宽度和小数点位数)
// 输出 " 123.450000"#include <stdio.h> int main(){ printf("%12.5f\n", 123.45); return 0;}上⾯⽰例中, %12f 表⽰输出的浮点数最少要占据12位(小数点也算一位)。.5表示小数点后面保留五位,所以 123.45 输出结果的头部会添加3个空格。并且最⼩宽度和⼩数位数这两个限定值,都可以⽤ * 代替,通过 printf() 的参数传⼊。#include <stdio.h>int main(){ printf("%*.*f\n", 6, 2, 0.5); 打印 0.50(前面两个空格) return 0;}// 等同于printf("%6.2f\n", 0.5);
2.2.2:总是显示正负号。默认情况下, printf() 不对正数显⽰ + 号,只对负数显⽰ - 号。如果想让正数也输出 + 号,可以在占位符的 % 后⾯加⼀个 + (但是一个负数你要用 +%d打印的话,还是一个负数)
#include <stdio.h>int main(){ printf("%+d\n", 12); // 输出 +12 printf("%+d\n", -12); // 输出 -12 return 0;}上⾯⽰例中, %+d 可以确保输出的数值,总是带有正负号。
2.3.3 输出部分字符串
%s 占位符⽤来输出字符串,默认是全部输出。如果只想输出开头的部分,可以⽤ %.[m]s 指定输出的⻓度,其中 [m] 代表⼀个数字,表⽰所要输出的⻓度。
// 输出 hello#include <stdio.h>int main(){ printf("%.5s\n", "hello world"); 注意是.5(带个点) return 0;}
2.3:scanf函数
2.3.1:基本用法
scanf() 处理⽤⼾输⼊的原理是,用户的输⼊先放⼊缓存,等到按下回⻋键后,按照占位符对缓存进⾏解读。解读用户输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条件的字符为⽌。
#include <stdio.h>int main(){ int x; float y; // ⽤⼾输⼊ " -13.45e12# 0" scanf("%d", &x); printf("%d\n", x); scanf("%f", &y); printf("%f\n", y); return 0;}scanf() 读取⽤⼾输⼊时, %d 占位符会忽略起⾸的空格,从 - 处开始获取数据,读取到 -13 停下来,因为后⾯的 . 不属于整数的有效字符。这就是说,占位符 %d 会读到 -13 。第⼆次调⽤ scanf() 时,就会从上⼀次停⽌解读的地⽅,继续往下读取。这⼀次读取的⾸字符是 . ,由于对应的占位符是 %f ,会读取到 .45e12 ,这是采⽤科学计数法的浮点数格式。后⾯的不属于浮点数的有效字符,所以会停在这⾥。
2.3.2:占位符
3.2.1:scanf() 常⽤的占位符如下,与 printf() 的占位符基本⼀致。
• %c :字符。
• %d :整数。
• %f : float 类型浮点数。
• %lf : double 类型浮点数。
• %Lf : long double 类型浮点数。
• %s :字符串。
• %[m] :在⽅括号中指定⼀组匹配的字符(⽐如 %[0-9] ),遇到不在集合之中的字符,匹配将会停⽌。
上⾯所有占位符之中,除了 %c 以外,都会⾃动忽略起⾸的空⽩字符。 %c 不忽略空⽩字符,总是返回当前第⼀个字符,⽆论该字符是否为空格。
如果要强制跳过字符前的空⽩字符,可以写成 scanf(" %c", &ch) ,即 %c 前加上⼀个空格,表⽰跳过零个或多个空⽩字符。
上面例子中,如果用户输⼊ 2020—01—01 ,就会正确解读出年、⽉、⽇。(第一个main)问题是⽤⼾可能输⼊其他格式,⽐如 2020/01/01 ,这种情况下, scanf() 解析数据就会失败。
为了避免这种情况, scanf() 提供了⼀个赋值忽略符(assignment suppression character) * 。
只要把 * 加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃
int main(){ int year = 0; int month = 0; int day = 0; scanf("%d%*c%d%*c%d", &year, &month, &day); return 0;}上⾯⽰例中, %*c 就是在占位符的百分号后⾯,加⼊了赋值忽略符 * ,表⽰这个占位符没有对应的变量,解读后不必返回。
3.2.2:下⾯要特别说⼀下占位符 %s ,它其实不能简单地等同于字符串。它的规则是,从当前第⼀个⾮空⽩字符开始读起,直到遇到空白字符(即空格、换⾏符、制表符等)为⽌。
因为 %s 不会包含空白字符,所以⽆法⽤来读取多个单词,除⾮多个 %s ⼀起使⽤。这也意味着,scanf() 不适合读取可能包含空格的字符串,⽐如书名或歌曲名。另外, scanf() 遇到 %s 占位符,会在字符串变量末尾存储⼀个空字符 \0 。(这个非常重要)
scanf() 将字符串读⼊字符数组时,不会检测字符串是否超过了数组⻓度。所以,储存字符串时,很可能会超过数组的边界,导致预想不到的结果。为了防⽌这种情况,使⽤ %s 占位符时,应该指定读⼊字符串的最⻓⻓度,即写成 %[m]s ,其中的 [m] 是⼀个整数,表⽰读取字符串的最⼤⻓度,后⾯的字符将被丢弃
#include <stdio.h>int main(){ char name[11]; scanf("%10s", name);//你最多输入10个不然/0没法放,scanf函数一定会给你补加一个\0 return 0;}
上⾯⽰例中, name 是⼀个⻓度为11的字符数组, scanf() 的占位符 %10s 表⽰最多读取⽤⼾输⼊的10个字符,后⾯的字符将被丢弃,这样就不会有数组溢出的⻛险了
三:关键字:
C语言中有⼀批保留的名字的符号,比如: int 、 if 、 return ,这些符号被称为保留字或者关键字。
• 关键字都有特殊的意义,是保留给C语言使用的
• 程序员自己在创建标识符的时候是不能和关键字重复的
• 关键字也是不能自己创建的。
C语言的32个关键字如下:
C语言关键字全部介绍
三:转义字符
像: \n , \0 。其实在字符中有⼀组特殊的字符是转义字符,转义字符顾名思义:转变原来的意思的字符。C语⾔中像这样的转义字符还有⼀些,具体如下:
? | 在书写连续多个问号时使用,防⽌他们被解析成三字母词,在新的编译器上没法验证了。 |
---|---|
’ | 用于表示字符常量’ |
\ | 用于表示⼀个反斜杠,防⽌它被解释为⼀个转义序列符。 |
\a | 警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。 |
\b | 退格键,光标回退⼀个字符,但不删除字符。 |
\f | 换页符,光标移到下一页。在现代系统上,这已经反映不出来了,行为改成类似于 \v 。 |
\n | 换行符。 |
\r | 回车符,光标移到同⼀行的开头。 |
\t | 制表符,光标移到下⼀个水平制表位,通常是下⼀个4/8的倍数。 |
\v |垂直分隔符,光标移到下⼀个垂直制表位,通常是下一行的同⼀列。
下⾯2种转义字符可以理解为:字符的8进制或者16进制表示形式
• \ddd :d d d表示1~3个八进制的数字。 如: \130 表示字符X
• \xdd :d d表示2个十六进制数字。 如: \x30 表示字符0
\0 :null 字符,代表没有内容, \0 就是 \ddd 这类转义字符的⼀种,⽤于字符串的结束标志,其ASCII码值是0
转义字符参考
四:最后我再讲一下制表符 \t
在C语言中,制表符(Tab)主要用于在输出中创建水平间隔,使得输出的文本更加整齐、易于阅读。制表符在C语言中的表示方式是使用转义字符\t。
转义字符\t在字符串中插入一个制表符,其效果是在输出时,将光标移动到下一个制表位。制表位通常是每8个字符(或根据环境设置的不同而有所变化)一个,但具体行为可能依赖于终端或显示环境的设置。
下面是一个简单的例子,展示了如何在C语言中使用制表符:
在这个例子中,\t用于在“姓名”、“年龄”和“职业”之间以及每行数据之间创建制表符间隔,使得输出的表格更加整齐。
需要注意的是,由于制表符的间隔是固定的(或基于环境设置的),它可能并不总是能够完美地适应所有情况。特别是当列宽变化较大时,可能需要使用空格或其他方法来达到更好的对齐效果。
此外,在某些情况下,如果希望更精确地控制输出格式,可以考虑使用printf函数中的宽度指定符(如%.5s、%10d等),这些指定符允许你指定输出字段的最小宽度,从而更灵活地控制输出格式。
上述就是C语言前期的一些容易遗忘的内容了,
欢迎各位大佬评论区留言修正
您的支持就是我最大的动力