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相关推荐

  1. [原创]商城系统下单库存管控系列杂记(二)(并发安全和性能部分延伸)

      商城系统下单库存管控系列杂记(二)(并发安全和性能部分延伸)     前言   参与过几个中小型商城系统的开发,随着时间的增长,以及对系统的深入研究和测试,发现确实有很多值得推敲和商榷的地方(总有 ...

  2. Webpack系列-第一篇基础杂记

    系列文章 Webpack系列-第一篇基础杂记 Webpack系列-第二篇插件机制杂记 Webpack系列-第三篇流程杂记 前言 公司的前端项目基本都是用Webpack来做工程化的,而Webpack虽然 ...

  3. 黯然微信小程序杂记(三):微信小程序实现倒计时功能 附讲解教学 附源码

    黯然微信小程序杂记(三):微信小程序实现倒计时功能 附超详细注释 附源码 一.功能描述 二.界面展示 三.test.wxml代码 四.test.js代码(注释很详细 很易懂) CSDN私信我,有关微信 ...

  4. 黯然微信小程序杂记(二):小程序最新版登录并进行缓存模块的实现 附源码

    黯然微信小程序杂记(二):小程序最新版登录进行缓存模块的实现 附源码 一.功能描述 二.mine.wxml界面图片 三.mine.wxml代码 四.mine.wxss代码 五.mine.js代码 六. ...

  5. 黯然微信小程序杂记(一):从服务器获取数据 后端语言php

    黯然学编程 之 微信小程序杂记(一):从服务器获取数据 后端语言php 一.功能描述 二.服务器.数据库与微信小程序逻辑的关系 服务器 数据库 与微信小程序逻辑关系 三.请求数据的代码(可当做模板用) ...

  6. SpringMVC杂记

    SpringWebflow杂记(一) 框架初探,与SpringMVC的集成 SpringMVC杂记(一) 文件上传 SpringMVC杂记(二) 使用@ResponseBody出现乱码解决方法 Spr ...

  7. webpack-插件机制杂记

    系列文章 Webpack系列-第一篇基础杂记 webpack系列-插件机制杂记 前言 webpack本身并不难,他所完成的各种复杂炫酷的功能都依赖于他的插件机制.或许我们在日常的开发需求中并不需要自己 ...

  8. Python 网络服务相关 杂记

    个人所有文章整理在此篇,将陆续更新收录:知无涯,行者之路莫言终(我的编程之路) 本文杂记了下面一些点 [1].Python的原生版Socket [2].python自带的模块:`wsgiref`的简单 ...

  9. 快速深入一门语言的几个问题 - Shell909090 - 随笔杂记

    快速深入一门语言的几个问题 - Shell909090 - 随笔杂记 快速深入一门语言的几个问题 劳资明天要结婚了,今天婚前最后一个blog. 1.hello, world 目标:屏幕上打印出hell ...

最新文章

  1. 软件包管理 之 软件在线升级更新yum 图形工具介绍
  2. git 提交 merge请求 WIP
  3. 软件架构的相关概念小汇
  4. chromedp网络监听_动态爬虫三:监听网络事件 + 监听js事件
  5. 缓存之EHCache(二)
  6. Python高级特性:迭代器和生成器
  7. # 遍历结构体_C#学习笔记05--枚举/结构体
  8. RVC使用指南(二)-集群管理
  9. 高通 AI、5G 争夺战!
  10. GraphX中Pregel单源点最短路径(转)
  11. python开发桌面时钟_python+PyQT实现系统桌面时钟
  12. 论文参考文献一定要在文中标注吗?
  13. 阿里Leader都干些啥
  14. 计算机专业学生的必备文具,初一新生必备文具100件 学霸用的文具清单
  15. mt6735通用recovery_Mtkroot ,arm64通用使用无需bl或者rec,安卓7以下使用最佳!
  16. FFmpeg转换格式与视频合并
  17. 企业微信机器人读取服务器,智能机器人如何对接到企业微信?
  18. 摩托入门第一课[老猫]
  19. 电感、电阻与温度的对应函数关系
  20. Vue 中调用 QQ官方的登录

热门文章

  1. js中单引号与双引号冲突,怎么办
  2. 如何实现AKS群集部署及挂载共享存储
  3. tapestry mysql_tapestry5.3 框架中使用系统环境变量配置hibernate 数据库连接参数
  4. 设计模式 第二天 工厂方法模式、抽象工厂方法模式、单例模式、代理模式
  5. Android TabLayout 宽度无法充满屏幕
  6. DNF类游戏动作实现(C语言)
  7. java mediator_关于Java 设计模式 中介者模式 Mediator
  8. scala 借助数组实现数据序列的错位相减
  9. webpack 打包流程(初学)
  10. SpringBoot如何读取配置文件(@Value/@ConfigurationProperties/Environment)