当前位置:首页 » 《关注互联网》 » 正文

关于C语言前期的一些容易遗忘点(超级详细)

29 人参与  2024年10月07日 13:21  分类 : 《关注互联网》  评论

点击全文阅读


?️如果您觉得这篇文章对您有帮助的话
欢迎您分享给更多人哦
感谢大家的点赞收藏评论,感谢您的支持!!!
请添加图片描述

关于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语言前期的一些容易遗忘的内容了,
欢迎各位大佬评论区留言修正

您的支持就是我最大的动力​​​​请添加图片描述

请添加图片描述


点击全文阅读


本文链接:http://zhangshiyu.com/post/168541.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1