自己的一些笔记

本文详细介绍了C语言中scanf()、%c、%s、%d等输入输出函数的用法,包括不同格式的差异及注意事项。同时,探讨了fgets()、getchar()函数的使用。接着,文章深入解析了数组指针和指针数组的概念,通过实例解释了如何赋值和操作。通过对这些基础知识的掌握,有助于提升C语言编程能力。
摘要由CSDN通过智能技术生成

输入与输出函数

scanf()

%c

scanf("%c",&a) 格式:不丢弃缓冲区的各种字符,例如空格、回车等。

scanf(" %c",&a) 格式:丢弃已经停留在缓冲区中的空白字符,例如空格、回车等。

scanf("%c ",&a) 格式:丢弃因本次输入而停留在缓冲区的空白字符,例如空格、回车等。

scanf(" %c ",&a) 格式:结合以上两个特性。

%s

scanf("%s",a) 格式:丢弃缓冲区前面的空白字符,例如空格、回车等,但是遇到非空白字符后再遇到空白字符则直接退出输入,并且把空格及其以后字符留在缓冲区内,在字符串结尾加’\0’表示结尾,缓冲区结尾加上’\n’字符。

scanf("%s ",a) 格式:性质与上相同,不同点是遇到空格后丢弃缓冲区内空格及与其连续存在的空格,保留空格后的第一个非空白字符。

scanf(" %s",a) 格式:与第一种格式相同性质。

scanf(" %s ",a) 格式:与第二种格式相同性质。

%d

scanf("%d",&a) : 不读取所有空白字符,但是在缓冲区的最后会留下回车和空格等字符不丢弃。

scanf("%d ",&a) :不读取空白字符,在缓冲区的最后会丢弃留下来的回车和空格等字符。

总结

​ 凡是在"%n"(n可以为任何)后面有空格,就会丢弃缓冲区内留下来的空格,凡是在其前面有空格就会丢弃原来缓冲区内前面的空格。

单独的%c会读取任何字符,使用时需要特别注意。


fgets()

fgets(char *a,maxsize,stdin/fp):例如fgets(a,5,stdin),读取4个字符,最后一位补’\0’,若输入不足4个字符,则在字符串末尾加’\n’,例如若输入不足:“123\n\0”。

getchar()

符串末尾加’\n’,例如若输入不足:“123\n\0”。

getchar()

​ 接收一个字符,包括非空白字符。


数组指针与指针数组

指针数组

​ 指针数组顾名思义就是储存指针的数组,本质上是个数组,存储的是地址,如:char *a[20];即能储存20个地址的指针数组,如果char b[]=“as5”;char c[]=“564”;即可以如此给a数组赋值:a[0]=b;即给a数组中下标为0的地方赋值为字符串b的地址,即字符串b中第一个字符的地址,可以通过此手段,给数组中赋值多个字符串,若打印a[0]即打印的是b字符串;若打印*a[0],即打印的是b字符串中的第一个字符,因为a[0]储存的是b中第一个字符的地址,通过这个地址能找到第一个字符,所以打印的是第一个字符。

数组指针

​ 数组指针就是一个指向数组的指针,本质上是个指针,储存的是一个数组的地址

char (*a)[20];

我们可以理解为

char[20]  (*a);

当然在编译器里不能这么写,这只是为了方便理解,以这个例子为例,a就是指向一个char[20]的数组,这里定义一个

char b[20];

如果要将数组b的地址给a,该怎么做?因为b的地址是它的第一个字符的地址,所以直接a=b吗?不当然不是,如果这样赋值,那直接就是把一个char类型的地址赋值给了a,如果a+1,这让它只往后移了一个char 类型大小的空间,但是a需要char[20]的地址,a+1应该要往后移一个char[20]大小的空间,所以我们应该这样赋值:

a=&b;

这样a才储存了数组b[20]的地址,打印一下*a,正好是b里面的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值