Tips

零. 写在前面

  1. 'a'(字符常量)和"a"有区别
  2. 调试时:监视里面输入(type()[number])begin

    type,类型

    number,查看数量

    begin,起始地址指针
  3. 函数可以改变数组的值,但是不能改变变量的值,只是表象:因为数组修改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;
  1. 遇到这个表达式:scanf("%d%d",&a,&b)!=EOF;

    如果a和b都被成功读入,那么上面表达式的结果为2;

    如果只有一个读入,那么上面表达式的结果为1;

    如果a&&b都没有读入,那么上面表达式的结果为0(若a没有读入,则直接放弃b的读入);

    如果遇到错误或者文件结尾,那么上面表达式的结果为EOF,对应的有符号数时-1;

    如果遇到Crrl+Z,那么上面表达式的结果为EOF,对应的有符号数时-1;

  2. 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的更多相关文章

  1. 嵌入式程序员应知道的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 ...

  2. Go语言Tips

    时间日期格式化 time.Now().Format("2006-01-02") 原生DefaultServeMux支持restful路由 ref: https://towardsd ...

  3. 〖Groovy〗语言使用贴士(Tips)(转)

    [Groovy]是一门运行在[JVM]之上的动态语言.由[James Strachan]和[Bob McWhirter]于2003年启动开发,之后于2004年3月成为[JSR 241](Java Sp ...

  4. C语言语法tips(不断更新)

    语法虽然琐碎,犯了低级错误代价可就大了,列出一些容易混淆概念,避免以后出错 sizeof和strlen的区别在于:1.sizeof是运算符,语言支持的,strlen可以求malloc出来的字符串的长度 ...

  5. go语言编程小tips

    go语言一个比较方便的特性是你不需要显示的定义一个变量.例如,在c语言中,你想要使用一个int型变量,那么代码如下 int i; i =0; i++; 而在go语言中, i := 0; i++ 这样你 ...

  6. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...

  7. UnrealScript语言基础

    总体特征 (1)大小写不敏感.关键字.宏.变量名.函数名以及类名不区分大小写:变量名可以与关键字同名 (2)局部变量.成员变量未初始化时,会被编译器初始化 (3)没有全局变量.全局函数,所有东西必须写 ...

  8. Struts2的OGNL表达式语言

    一.OGNL的概念 OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者 ...

  9. 【读书笔记】100个Switf必备tips

    声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 1.Selector 在Swi ...

  10. Best Practices for Performance_1、2 memory、Tips 性能和小的优化点、 onTrimMemory

    http://developer.android.com/training/articles/memory.htmlhttp://developer.android.com/tools/debuggi ...

随机推荐

  1. NOIP集训 P11071 「QMSOI R1」 Distorted Fate 题解

    对本题的评价:有思维含量的线段树好题.曲子好听,曲绘好看,曲师人品好,谱子写得好,鸠好看 题解: P11071 「QMSOI R1」 Distorted Fate 给定一个长度为 \(n\) 的数组 ...

  2. 【安装】Ubuntu 20.04下快速安装ROS2 Foxy

    参考博客 ROS2安装 有的地方原博主打错了,还没改过来,我按我自己的改好了. 有的地方比如github和raw.githubusercontent.com访问不了,我替换成能用的镜像源了,只求一键复 ...

  3. Join 实现 2 表数据联动

    最近在做一个简单的报表, 用的工具是帆软报表, 一开始觉得有点low, 现在看看还行, 除了界面真的太丑外, 其它还要, 这种大量要使用 sql 的方式, 我觉得是非常灵活高效的, I like . ...

  4. flutter3-deepseek流式AI模板|Flutter3.27+Dio+DeepSeeek聊天ai助手

    基于Flutter3+DeepSeek-V3+Markdown跨平台流式ai打字输出问答助手. flutter3-deepseek-chat跨平台ai流式实例,基于Flutter3.27+Dart3+ ...

  5. python终端中使用pip指令下载模块显示SyntaxError: invalid syntax解决办法

    今天学习爬虫导入模块时遇到以下错误,即语法错误 >>> pip bs4 File "<stdin>", line 1 pip bs4 ^^^ Synt ...

  6. centos7环境配置(防火墙,git,nodejs,redis,nginx)

    一台新的云服务器,如何配置基础环境: 0. 更新软件包和存储库 sudo yum update -y 1. 防火墙设置 # 启动防火墙 systemctl start firewalld # 查看防火 ...

  7. 不得不说一下vite

    vite简介 Vite 是一个由原生 ESM 驱动的 Web 开发构建工具.在开发环境下基于浏览器原生 ES imports 开发,在生产环境下基于 Rollup 打包. vite作用 快速的冷启动: ...

  8. 袋鼠云:拥抱DeepSeek大模型,做Data+AI的长期主义者

    <数据资产管理白皮书>下载地址:https://www.dtstack.com/resources/1073/?src=szsm <行业指标体系白皮书>下载地址:https:/ ...

  9. 数栈产品分享:基于StreamWorks构建实时大数据处理平台

    数栈是云原生-站式数据中台PaaS,我们在github和gitee上有一个有趣的开源项目:FlinkX,FlinkX是一个基于Flink的批流统一的数据同步工具,既可以采集静态的数据,也可以采集实时变 ...

  10. Nginx 配置(Config)中遇到的错误(Error)

    原文:https://ichochy.com/posts/software/20231125.html nginx location 正则错误写法 location 错误的写法 匹配请求目录地址 /5 ...