C语言学习笔记——C语言结构

本文是C语言学习笔记,介绍了头文件的使用,如stdio.h、stdlib.h等,以及基本输入输出函数,包括getchar()、gets()、scanf()、putchar()、puts()和printf()的功能和用法,详细解析了它们的参数和工作原理。
摘要由CSDN通过智能技术生成

C语言是一种面向过程的结构化的语言,同时具有高级语言和汇编语言的优点

所有的C语言程序经过编译和连接之后才能被计算机执行

一、头文件

头文件是一种特殊的文件,记录了很多可以直接引用头文件然后使用的函数,也可通过#define声明函数、变量、宏等的定义

头文件通常包含在源代码中,可以被多个源文件包含使用。头文件以 .h 扩展名结尾,例如 stdio.h、stdlib.h 等

  • stdio.h:声明了输入输出函数,例如 printf 和 scanf
  • stdlib.h:声明了一些通用的函数,例如动态内存分配函数 malloc 和 free
  • string.h:声明了一些字符串操作函数,例如 strlen 和 strcpy
  • math.h:声明了一些数学函数,例如三角函数和指数函数

引用标准头文件使用尖括号<>,引用自己写的头文件,使用"",此时会优先在用户当前目录中寻找所需头文件

stdio.h——标准输入输出函数,包含输入函数(getchar()、gets()、scanf() 等)输出函数(putchar()、puts()、printf() 等)

#include <stdio.h>  //预处理器指令,告诉 C 编译器在实际编译之前要包含 stdio.h 文件

int main() {
printf("Hello, world!\n");
return 0;
}
/*这是C语言自己的注释符*/ 
//这是C++的注释符

函数在调用之前必须要声明,声明写在cpp文件, 写在主函数里面需要在调用之前写声明(告诉主函数有这么一个函数),写在主函数前面则不用再写声明

模板函数需要写在.h文件里面,实现写在另一个cpp文件

每个声明后面都要有分号

二、基本输入输出函数

代码执行是在操作系统中申请一个线程,线程是进程的子集

1、主函数

主函数是C语言程序执行的入口,是操作系统调用的函数——所有的程序都是从main()函数开始执行的,return 0 表示程序正常退出

main()函数也可作为其他编程语言连接C语言的入口

主函数可以带参数,也可以不带参数——带参数的话,C语言规定要有两个参数:

main (int argc,char *argv[ ]) 或者 int main (int argc,char **argv)


main() 函数参数

argc(arguments count(参数计数))表示参数的个数,参数是从第二位开始传入,但参数个数是输入的所有元素的和,包括文件名

*argv[] (arguments value/vector(参数值))表示一个参数是字符指针的数组,数组内的每个元素都是一个字符指针,每个指针都指向一个字符串

由于main函数不能被其他的函数调用,所以不可能在程序内部取得实际值,只能在命令行里面取得——也就是说,在命令行下输入文件名+实际参数,这些实际参数就会从第二位开始传到指针数组里面 

C语言main函数还有一个参数——char *argv[ ]

2、输入函数

标准输入输出库stdio.h的输入函数有getchar()、gets()、scanf()等

getchar() 函数

getchar() 函数每次只能在终端(输入设备)输入一个字符,返回值为该字符的ASCII码,该函数没有参数,读取失败的时候会返回EOF,语法为

int getchar();

一般会将接受的字符赋值给一个字符变量或者整形变量,还可以作为表达式的一部分——putchar(int getchar()); 表示将getchar()作为putchar()函数的参数

getchar() 函数在读取到\n的时候跳出循环,程序继续往下执行;读取到EOF的时候停止读取

printf()格式化输出的时候使用%c——表示占位一个字符——读取时不会忽略空白符

gets() 函数

gets() 函数用于获取用户在终端输入的一个字符串,语法如下:

char *gets(char *str)

字符指针str是形式参数,主要用于存储获取的字符串

读取过程中,遇到空格不会停止

出现换行符、回车、EOF(文本文件结束符 ctrl+z)的时候会转换为字符串中的结束符 “\0”—— 此时停止读取——数据最后的空白符会被直接舍弃,所以读什么输什么,不会输出之间的空白符

scanf() 函数

格式化输出的格式使用双引号括起来

scanf() 函数用于按照指定格式接收用户在终端的输入,并按序存储在指定变量中,语法如下

scanf("%d",&iInt);   //&表示取地址
scanf() 函数与缓冲区(格式)

scanf() 函数的接收原理是行缓冲——接收一串字符时,回车之后才能读取到,打印的时候,先传字符串,回车留在缓冲区里,然后再传回车

scanf() 函数:遇到不符合读取规则的数据时,读取失败,退出程序,但不符合输入格式的数据仍会保存在缓冲区,等待下一次读取,读取之后或者手动清除后才会消失 —— 一般一次传参完成之后都需要清空缓冲区,防止下次传参出现问题

Ⅰ、scanf() 函数以 “%d” 的格式接收数据(%f 同理)

接收数据时以空白符作为两个参数之间的分割(空白字符包括:空格、回车换行、制表符),输出时只会读取有效数据,不会输出空白符

Ⅱ、以 “%s” 的格式接收数据

接收数据时会忽略有效数据前面的空白符,读到数据之后再次读取到空白符后会停止读取然后在读取到的字符串后面自动加一个 '\0' 作为结束标志——剩余内容仍在缓冲区内,下次读取的时候,会忽略空白符,只读取有效字符

Ⅲ、以 “%c” 的格式接收数据

不会忽略任何空白符,默认没有分隔符,所有按键敲下的字符都会被认为是输入——可以通过在参数之间加getchar()函数吸收空白符


scanf() 函数的格式化传参

# scanf("a=%d",&a);  scanf("b=%d",&b);

中间不能留有空格和回车,否则就会读取失败——可以在参数之间加一个getchar()函数吸收空格

# scanf("%s,%d",&a,&b);

scanf需先读取一个字符串,再读取一个 ',',最后读取一个整数

# scanf("%d\t%d",&a,&b);

scanf需先读取一个整数,再将格式化字符串中的 ‘\t’ (空白字符)与缓冲区中0个或多个空白字符匹配并清除,最后读取一个整数

# scanf("%d%d",&a,&b);

scanf需要先读取一个整数,之后再读取一个整数,两个整数之间的空白字符会被忽略

# scanf("%c %c", &a, &b);

此时字符传参时,可以在中间加一个空格

3、输出函数

putchar() 函数

putchar() 函数每次只能输出单个字符,参数ch可以是字符型、整型、实型常量(浮点数)或者变量的常量值

putchar(int ch);

常量要使用单引号引起来,变量不需要

如果函数参数为整数,则会返回对应的ASCII码的字母

puts() 函数

puts() 函数一次可以输出多个字符,主要用于输出一个字符串并换行,语法格式如下

puts(char *str);

其中字符指针变量*str是形参,主要用于接收要输出的字符串

puts() 函数输出字符串遇到 \0(编译器在字符串后加 \0 ),之后字符不再输出,然后自动换行

一般来说——字符使用单引号,字符串使用双引号

左杠注释除取商,右杠转义0换行

printf() 函数

printf() 函数格式化输出函数,格式化输出的格式控制使用双引号括起来,语法如下

printf("%d",变量/表达式);   
  • 格式输出时,要输出双引号须在双引号内写为 \"
  • 要输出百分号,双写即可 %%
  • 格式控制比传输列表多时,多余的输出为不定值
  • 格式控制比输出列表少时,输出列表的多余的内容不输出

printf() 函数压栈顺序——从左到右:栈底-->栈顶;计算顺序——从上到下;结果顺序——从下到上(先出的在最后一个,后出的结果显示在第一位,按照输出列表的正常顺序出栈)——  顺序压栈,逆序计算,顺序输出结果

printf() 函数与堆栈(自增)

1、printf输出的时候,每次的自增都作为下次自增的输入

2、自增运算中的++a属于临时变量,每个++a的结果都和最后一次自增的结果一样

 3、自增运算中的a++输出当前的值作为结果

小结 ———————— 值是定值,a是+a,列好堆栈,倒序计算(顺序输出)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nosery

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值