杂记(unfinished
NULL
在c中NULL是个指针变量,指向地址0
简单来说,NULL的作用就是当一个指针变量没有被显性初始化时,将该指针变量的值赋为NULL。解引用前判断指针变量是否为NULL,如果为NULL说明该指针没有初始化过,不可解引用
可以防止我们错误的解引用指针
NULL是一个特殊的地址,在操作系统中定义该地址是不可以访问的,我猜测NULL也就是0地址是操作系统内核的地址,用户是不可访问的。一旦我们去解引用NULL地址,就会报段错误
strcpy函数
是将一个字符串复制到另一块空间地址上的函数
\0时停止拷贝,同时也将’\0’复制到目标空间
char*strcpy(char*destination,const char*source);
具体使用
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main(){char arr[10] = "########";printf("%s\n", strcpy(arr,"hello"));
} //输出结果hello
//第二种使用方法
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>int main(){char arr1[10] = "**********";char arr2[10] = "abcd";printf("%s\n", strcpy(arr1, arr2));
}
注意事项
原字符必须以’\0’结尾
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>int main()
{char arr1[10] = "**********";char arr2[] = { 'a','b','c','d' };printf("%s\n", strcpy(arr1,arr2)); //arr2字符串所在的内存空间后面存储的内容并不知道,会导致越界
}
目标空间必须足够大,以确保能放原字符串
目标空间必须可变
getchar() putchar()
这些函数只处理字符,所以比scanf函数更快
该函数以无符号char强制转换为int的形式读取返回函数,如果发生错误则返回EOF
用户输入的字符被放在缓冲区中,直到用户按下回车为止,回车字符也放在缓冲区
返回值是ASCII码,要用int类型存储,每一次循环读入一个字符
getchar函数不带任何参数,他从输入队列中返回下一个字符
ch=getchar();
scanf("%c",&ch); //等效于上面那个语句
putchar() 打印他的参数
putchar(ch);
printf("%c",ch);
同时存在两个输入函数
不正确的输入方法:
原因:两个输入函数的值都存在于一个缓冲区域,同时存在两个输入函数时,第一次输入的被scanf读取走,敲击回车键进入下一个语句时,只剩下了’\n’存在缓冲区中,所以直接走了else语句
//设置密码操作
int main(){char password[]={0};printf("please enter the password");scanf("%s",password);int ch =getchar();if(ch=='y')printf("right");elseprintf("FALSE");
}
改进方案
int main(){char password[]={0};printf("please enter the password");scanf("%s",password);printf("please check the password");while(getchar()!='\n'){;}int ch =getchar();if(ch=='y')printf("right");elseprintf("FALSE");
}
int main(){int ch=0;while((ch=getchar())!=EOF){if(ch<'0' || ch>'9')continue;putchar(ch);}
}
多次使用scanf函数
函数第一次调用scanf之后,只从stdin中取走了信息,但是回车是没有取的,所以第二次调用会出现直接返回的现象,将回车取走
操作:加上fflush(),清空stdin
#include <stdio.h>
#include <math.h>
double cal(double a1, double b1, double a2, double b2){double t;t = sqrt(pow((a1-a2),2)+pow((b1-b2),2));return t;
}
int main(int argc, char const *argv[]){double x1 = 0, x2 = 0, y1 = 0, y2 = 0, d = 0;printf("Please input section A :\n");scanf("%lf%lf", &x1, &y1);fflush(stdin);printf("Please input section B :\n");scanf("%lf%lf", &x2, &y2);d = cal(x1,y1,x2,y2);printf("The distance is %f\n", d);
}
ctype.h系列的字符函数
c有一系列专门处理字符的函数,ctype.h这个头文件里包含了这些函数的原型
头文件中的字符测试函数
函数名 | 如果是下列参数返回值为真 |
---|---|
isalnum() | 字母数字(字母或数字) |
isalpha() | 字母 |
isblank() | 标准的空白字符(空格、水平制表符或换行符)或任何本地化指定为空白的字符 |
iscntrl() | 控制字符,如ctrl+B |
isdigit() | 数字 |
isgraph() | 除空格之外的任意可打印字符 |
islower() | 小写字母 |
isprint() | 大写字母 |
ispunct() | 标点符号(除空格或字母数字字符以外的任何可打印字符) |
isspace() | 空白字符(空格、换行符、换页符、回车符、垂直制表符、水平制表符或其他本地化的字符) |
isupper() | 大写字母 |
isxdigit() | 十六进制数字符 |
头文件中的字符映射函数
函数名 | 行为 |
---|---|
tolower() | 如果参数是大写字母,则函数返回值为小写字母,否则返回原始函数 |
toupper() | 如果参数是小写字母,则函数返回值为大写字母,否则返回原始函数 |
使用案例
#include <stdio.h>
#include <ctype.h> // 包含isalpha()的函数原型
int main(void){char ch;while ((ch = getchar()) != '\n'){if (isalpha(ch)) // 如果是一个字符,putchar(ch + 1); // 显示该字符的下一个字符else // 否则,putchar(ch); // 原样显示}putchar(ch); // 显示换行符
}
continue break
continue
所有循环可以使用continue语句,执行到该语句时,会跳过本次迭代的剩余部分,并开始下一轮迭代,如果在嵌套循环里面,则只会影响包含该语句的内层循环
switch语句不能使用continue语句
避免使用continue
1.省略continue
2·把剩余部分放在else块中
当作占位符
优点:可读性更高
如若复杂化代码,则可以考虑在使用反向判断的情况下,不使用continue
while(getchar()!='\n'){;
}
//第二种方法
while(getchar()!='\n'){continue;
}
易错
如果执行continue语句,则会跳过后两个语句,直接执行while循环语句
int count=0;
while(count<10){ch=getchar();if(ch=='\n')continue;putchar();count++;
}
break
范围
所有的循环和break语句,跳出当前循环或者执行switch语句的剩余部分
作用
会终止包含他的循环,并继续执行下一阶段。
如果break语句位于嵌套循环之内,他只会影响当前循环
while(scanf("%f %f",&length,&width)==2);//利用scanf函数的返回值,判断输入的是否为浮点数
scanf函数的返回值
正整数
表示正确输入参数的个数
while(scanf("%f %f",&length,&width)==2);//利用scanf函数的返回值,判断输入的是否为浮点数
例如执行 scanf(“%d %d”, &a, &b);
如果用户输入”3 4”,可以正确输入,返回2(正确输入了两个变量);
如果用户输入”3,4”,可以正确输入a,无法输入b,返回1(正确输入了一个变量)。
0
表示用户的输入不匹配,无法正确输入任何值。如上例,用户如果输入”,3 4”,返回0。
EOF
这是在 stdio.h 里面定义的常量(通常值为-1),表示输入流已经结束。在Windows下,用户按下CTRL+Z(会看到一个^Z字符)再按下回车(可能需要重复2次),就表示输入结束;Linux/Unix下使用CTRL+D表示输入结束。
goto语句
组成
goto和标签名
part2:printf("refined analysis:\n";)
goto part2;
可以接受的一种方法
while (funct > 0){for (i = 1; i <= 100; i++){for (j = 1; j <= 50; j++){//其他语句if (问题)goto help;//其他语句}//其他语句}// 其他语句
}
//其他语句
help: 语句
杂记(unfinished相关推荐
- [原创]商城系统下单库存管控系列杂记(二)(并发安全和性能部分延伸)
商城系统下单库存管控系列杂记(二)(并发安全和性能部分延伸) 前言 参与过几个中小型商城系统的开发,随着时间的增长,以及对系统的深入研究和测试,发现确实有很多值得推敲和商榷的地方(总有 ...
- Webpack系列-第一篇基础杂记
系列文章 Webpack系列-第一篇基础杂记 Webpack系列-第二篇插件机制杂记 Webpack系列-第三篇流程杂记 前言 公司的前端项目基本都是用Webpack来做工程化的,而Webpack虽然 ...
- 黯然微信小程序杂记(三):微信小程序实现倒计时功能 附讲解教学 附源码
黯然微信小程序杂记(三):微信小程序实现倒计时功能 附超详细注释 附源码 一.功能描述 二.界面展示 三.test.wxml代码 四.test.js代码(注释很详细 很易懂) CSDN私信我,有关微信 ...
- 黯然微信小程序杂记(二):小程序最新版登录并进行缓存模块的实现 附源码
黯然微信小程序杂记(二):小程序最新版登录进行缓存模块的实现 附源码 一.功能描述 二.mine.wxml界面图片 三.mine.wxml代码 四.mine.wxss代码 五.mine.js代码 六. ...
- 黯然微信小程序杂记(一):从服务器获取数据 后端语言php
黯然学编程 之 微信小程序杂记(一):从服务器获取数据 后端语言php 一.功能描述 二.服务器.数据库与微信小程序逻辑的关系 服务器 数据库 与微信小程序逻辑关系 三.请求数据的代码(可当做模板用) ...
- SpringMVC杂记
SpringWebflow杂记(一) 框架初探,与SpringMVC的集成 SpringMVC杂记(一) 文件上传 SpringMVC杂记(二) 使用@ResponseBody出现乱码解决方法 Spr ...
- webpack-插件机制杂记
系列文章 Webpack系列-第一篇基础杂记 webpack系列-插件机制杂记 前言 webpack本身并不难,他所完成的各种复杂炫酷的功能都依赖于他的插件机制.或许我们在日常的开发需求中并不需要自己 ...
- Python 网络服务相关 杂记
个人所有文章整理在此篇,将陆续更新收录:知无涯,行者之路莫言终(我的编程之路) 本文杂记了下面一些点 [1].Python的原生版Socket [2].python自带的模块:`wsgiref`的简单 ...
- 快速深入一门语言的几个问题 - Shell909090 - 随笔杂记
快速深入一门语言的几个问题 - Shell909090 - 随笔杂记 快速深入一门语言的几个问题 劳资明天要结婚了,今天婚前最后一个blog. 1.hello, world 目标:屏幕上打印出hell ...
最新文章
- 软件包管理 之 软件在线升级更新yum 图形工具介绍
- git 提交 merge请求 WIP
- 软件架构的相关概念小汇
- chromedp网络监听_动态爬虫三:监听网络事件 + 监听js事件
- 缓存之EHCache(二)
- Python高级特性:迭代器和生成器
- # 遍历结构体_C#学习笔记05--枚举/结构体
- RVC使用指南(二)-集群管理
- 高通 AI、5G 争夺战!
- GraphX中Pregel单源点最短路径(转)
- python开发桌面时钟_python+PyQT实现系统桌面时钟
- 论文参考文献一定要在文中标注吗?
- 阿里Leader都干些啥
- 计算机专业学生的必备文具,初一新生必备文具100件 学霸用的文具清单
- mt6735通用recovery_Mtkroot ,arm64通用使用无需bl或者rec,安卓7以下使用最佳!
- FFmpeg转换格式与视频合并
- 企业微信机器人读取服务器,智能机器人如何对接到企业微信?
- 摩托入门第一课[老猫]
- 电感、电阻与温度的对应函数关系
- Vue 中调用 QQ官方的登录
热门文章
- js中单引号与双引号冲突,怎么办
- 如何实现AKS群集部署及挂载共享存储
- tapestry mysql_tapestry5.3 框架中使用系统环境变量配置hibernate 数据库连接参数
- 设计模式 第二天 工厂方法模式、抽象工厂方法模式、单例模式、代理模式
- Android TabLayout 宽度无法充满屏幕
- DNF类游戏动作实现(C语言)
- java mediator_关于Java 设计模式 中介者模式 Mediator
- scala 借助数组实现数据序列的错位相减
- webpack 打包流程(初学)
- SpringBoot如何读取配置文件(@Value/@ConfigurationProperties/Environment)