C语言Tips
Tips
零. 写在前面
- 'a'(字符常量)和"a"有区别
- 调试时:监视里面输入(type()[number])begin
type,类型
number,查看数量
begin,起始地址指针 - 函数可以改变数组的值,但是不能改变变量的值,只是表象:因为数组修改x[0]是自动就该地址了,相当于已经用过指针了。字符数组scanf不用&
一.关于输入Input,输出Output
Input
- fflush(stdin); 清除输入缓冲区
- scanf()函数按s格式符不能输入带空格的字符串,读%d或者%s时,读到空格、回车、制表符等空白字符,认为读入结束;
- gets()函数可以处理带空格的字符串。
- fgets(name,sizeof(name),stdin);限制输入字符串长度的函数
- 区别:gets以回车符作为终止符,同时将回车符从输入缓冲区读走,但不作为字符串的一部分;而scanf()不读走回车符,回车符仍然留在输入缓冲区中。
- 例:
char name[N];
scanf("%s",name);
get(name);
- scanf("%d%d",&a,&b)!=EOF;
遇到这个表达式:scanf("%d%d",&a,&b)!=EOF;
如果a和b都被成功读入,那么上面表达式的结果为2;
如果只有一个读入,那么上面表达式的结果为1;
如果a&&b都没有读入,那么上面表达式的结果为0(若a没有读入,则直接放弃b的读入);
如果遇到错误或者文件结尾,那么上面表达式的结果为EOF,对应的有符号数时-1;
如果遇到Crrl+Z,那么上面表达式的结果为EOF,对应的有符号数时-1;EOF在scanf连用时代表-1的意思,当用到while(scanf()!=EOF),
代表的意思是一直输入,直到scanf返回的值是-1时才会停止输入,
也可以在while里面加上一些约束条件,使输入在特定的条件下就会停止,
也可以在输入完成后按下 ,Ctrl+z,可以强行停止输入。
Onput
puts()函数用于从括号内的参数给出的地址开始,依次输出储存单元中的字符,当遇到第一个'\0'时输出结束,并且自动输出一个换行符。
printf("name\n",name);
puts(name);
二.数组(Array)的定义 :一组具有相同类型的变量的集合。
一维数组:
int score[SIZE];
- 其中"int"代表该 数组的基类型(Base Type)(数组中的元素的类型),"SIZE"下表的个数表明 数组的维数(Dimension)
- 第一个元素为score[0], SIZE要么不写,要么是常量,不能是变量
- 例如:
int score[5] = {0,0,0,0,0};
二维数组:
dataType arrayName[length1][length2]; // 行数:length1 ,列数:length2
- 第二维长度不能忽略。
- 例如:
int matrix[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};//等价
int matrix[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int matrix[][4] = {{1,2,3},{4,5},{6}}; //等价
int matrix[3][4] = {{1,2,3,0},{4,5,0,0},{6,0,0,0}};
三.字符串(Character string)
定义
char str[6] = {'H','e','l','l','o','\0'}; '\0'在字符串中也占内存,自动添加
char str[]= {"Hello"}; char str[] = "Hello";
char weekday[7(可省略)][10] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};\\长度为10,不足补'\0'
字符串处理函数
(1) strlen(str);字符串长度
由函数值返回字符串str的实际长度,不包括'\0'.
(2) strcpy(str1,str2);字符串复制
将字符串str2复制到字符数组str1中,这里确保str1大小足以容纳str2.
(3) strcmp(str1,str2);字符串比较
str1大于str2,返回值大于0;
str1等于str2,返回值等于0;
str1小于str2,返回值小于0;
按照ASCII码值从左到右比较。
(4) strcat(str1,str2)字符串连接
str2添加到str1末尾,函数调用后返回字符数组str1的首地址。(str1要定义的足够大)
(2)(3)(4)若写成(str1,str2,n)即对str2前n个字符进行操作。
四.结构体
定义
(1)先声明结构体,在定义结构体变量
struct 结构体名 结构体变量
struct 结构体名
{
数据类型 成员1名字
数据类型 成员2名字
};
或者如下定义
(2)struct 结构体名
{
数据类型 成员1名字
数据类型 成员2名字
}结构体变量;
(3)typedef struct student STUDENT;
STUDENT stu1,stu2;
结构体数组
STUDENT[30] = {{},{},{}}
五.其他数据类型
共用体
union
共用体是将逻辑相关,情形互斥的不同数据组织在一起形成的数据结构,每一时刻只有一个数据成员起作用。
枚举数据类型
enum response{no,yes,none};
enum response answer;
第一句声明了名为response的枚举类型,同时列出取值可能,第二句定义了response枚举型变量answer。
六.指针(Pointer)
取地址运算符(Address Operator),
- 即&. (%p格式符,表示输出变量地址值),地址值是用一个十六进制(以16为基)的无符号整数表示,其字长一般与主机字长相同。
例:
printf("%d,%p",a,&a); //表示print出a的值和地址值。
指针的定义与初始化
- 类型关键字 *指针变量名
- 例:
int *pa;
pa = &a; //初始化指针变量pa,使其指向a
*pa = 2; //直接从地址上改变指向的值
- 指针运算符也称为间接寻址运算符或者引用运算符即*,用来访问指针变量指向的变量的值。
例: 函数指针直接改变传入参数的值
Swap(&x,&y);
void Swap(int *x,int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
函数指针
void SelectionSort(int a[],int n,int (*compare)(int a,int b));
int Ascending(int a,int b);
int Descending(int a,int b);
main()
{
SelectionSort(score,n,Ascending);
SelectionSort(score,n,Descending);
}
void SelectionSort(int a[],int n,int (*compare)(int a,int b))//选择法排序
{
int i,j,k;
for(i=0;i<n-1;i++)
{
k = i;
for(j=i+1;j<n;j++)
{
if((*compare)(a[j],a[k]))
{
k = j;
}
}
if(k!=i)
{
Swap(&a[k],&a[i]);
}
}
}
int Ascending(int a,int b)
{return a > b;}
int Descending(int a,int b)
{return a < b;}
七.文件操作
- C语言文件类型有两种:文本文件(ASCII码文件),二进制文件
文件的打开与关闭
"r": 以只读方式,打开文本文件
"w": 以只写方式,创建并打开文本文件,已存在的文件将被覆盖
"a": 以只写方式,打开文本文件,位置指针移动到文件末尾,向文件尾部添加数据,原数据保留
"+": 与上面字符串组合,以读写方式打开文本文件,可写可读
"b": 与上面字符串组合,表示打开二进制文件
例:文件指针fp是指向FILE结构类型的指针变量
FILE *fp;
fp = fopen("D: \\demo.txt","a+"); //在demo文件中读写
fp == NULL; 判断是否读取成功
读写文件中的字符
fputs(char,fp): 用于将一个字符写到一个文件上。
feof(fp): 用于检查是否到达文件末尾,当文件位置指针指向文件结束符时。返回非0值,否则返回0值。
fgets(char *s,n,fp): 用于从一个以只读或读写方式打开的文件上读字符。读取字符串并在末尾添加'
0',然后存入s,最多读n-1个字符
C语言Tips的更多相关文章
- 嵌入式程序员应知道的0x10个C语言Tips
[1].[代码] [C/C++]代码 跳至 [1] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...
- Go语言Tips
时间日期格式化 time.Now().Format("2006-01-02") 原生DefaultServeMux支持restful路由 ref: https://towardsd ...
- 〖Groovy〗语言使用贴士(Tips)(转)
[Groovy]是一门运行在[JVM]之上的动态语言.由[James Strachan]和[Bob McWhirter]于2003年启动开发,之后于2004年3月成为[JSR 241](Java Sp ...
- C语言语法tips(不断更新)
语法虽然琐碎,犯了低级错误代价可就大了,列出一些容易混淆概念,避免以后出错 sizeof和strlen的区别在于:1.sizeof是运算符,语言支持的,strlen可以求malloc出来的字符串的长度 ...
- go语言编程小tips
go语言一个比较方便的特性是你不需要显示的定义一个变量.例如,在c语言中,你想要使用一个int型变量,那么代码如下 int i; i =0; i++; 而在go语言中, i := 0; i++ 这样你 ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
- UnrealScript语言基础
总体特征 (1)大小写不敏感.关键字.宏.变量名.函数名以及类名不区分大小写:变量名可以与关键字同名 (2)局部变量.成员变量未初始化时,会被编译器初始化 (3)没有全局变量.全局函数,所有东西必须写 ...
- Struts2的OGNL表达式语言
一.OGNL的概念 OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者 ...
- 【读书笔记】100个Switf必备tips
声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 1.Selector 在Swi ...
- Best Practices for Performance_1、2 memory、Tips 性能和小的优化点、 onTrimMemory
http://developer.android.com/training/articles/memory.htmlhttp://developer.android.com/tools/debuggi ...
随机推荐
- 【笔记】PyVis|神经网络数据集的可视化
文章目录 版本: 应用实例: PyVis的应用: 零.官方教程 一.初始化画布`Network` 二.添加结点 添加单个结点`add_node`: 添加一系列结点`add_nodes`: 三.添加边 ...
- 基于口令的密码—PBE
目录 流程 加密流程 解密流程 盐的作用 通过拉伸来改良PBE的安全性 如何生成安全口令的建议 定义: PBE是一种根据口令生成密钥并用该密钥进行加密的方法. 加密和解密都使用同一个密钥. 口令一词多 ...
- 🧠 30 个 MCP 项目创意(附完整源码)
MCP(Model Context Protocol)是一种新兴的开放协议,旨在标准化应用程序如何向大型语言模型(LLMs)提供上下文和工具.它允许 AI 代理与实际工具和应用程序交互,从而实现复杂的 ...
- 基于Kubernetes可扩展的Selenium 并行自动化测试部署及搭建(1)——Win10环境下Docker部署
前言: 最近逛swtestacademy时候发现一篇基于kubernetes搭建selenium并行自动化测试的帖子,主要描述的是通过k8s动态扩展selenium grid来实现自动化测试用例在不同 ...
- API安全大揭秘:认证与授权的双面舞会
title: API安全大揭秘:认证与授权的双面舞会 date: 2025/05/28 12:14:35 updated: 2025/05/28 12:14:35 author: cmdragon e ...
- 【Spring Boot】ActiveMQ 连接池
spring.activemq.pool.enabled=false时,每发送一条数据都需要创建一个连接,这样会出现频繁创建和销毁连接的场景.为了不踩这个坑,我们参考池化技术的思想,配 ...
- win10将python打包成apk详细文档
打包不支持windows所以可以找一台linux的电脑 或者用win10子系统(推荐) 我用的是Ubuntu 方法:https://www.jianshu.com/p/fcf21d45ea74 我简单 ...
- 洛谷 P2731 [USACO3.3]骑马修栅栏 Riding the Fences
题意描述 每个栅栏是一条无向边,找出字典序最小的欧拉路.数据保证至少有一个解. 最多 \(500\) 个点, \(1024\) 条边. 分析 看着如此微小的数据范围,随便瞎搞都行使用矩阵来存储边,同时 ...
- 自签名证书工具cfssl详解
概述 GitHub地址:https://github.com/cloudflare/cfssl 官方地址:https://pkg.cfssl.org CFSSL(CloudFlare's PKI an ...
- 深度解析 JuiceFS 权限管理:Linux 多种安全机制全兼容
在多用户和高安全性要求的系统中,文件与目录权限控制是实现资源隔离与系统安全的基础机制.Linux 操作系统的文件权限模型提供了灵活强大的权限控制机制,通过对用户.组和其他用户的权限设置,确保系统资源的 ...