数组的输入与输出
前言:
我们知道对一个字符数组进行输入与输出时会用到:
输入:scanf,getchar,gets
输出:printf,putchar,puts
然而可能还有很多的朋友对这些还不是很了解,今天让我们共同学习数组的输入与输出吧。
%c格式是用于输入单个字符的,其能够识别换行字符或者空格字符,并保存于字符数组当中;
%s格式是用来输入一个字符串的,其作用可以识别一个字符串的结束
目录
1,数组的输入:
(1)scanf:
一般情况下,scanf是可以直接使用的,但是有些编译器可能会报错,如果出现编译器报错,可以尝试在代码顶部添加:#define _CRT_SECURE_NO_WARNINGS
当我们输入多个字符且使用循环输入(类似于for)时注意,应使用“%c”,在这样的情况之下将可以正常读取空格键
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
char str[5];
for (int i = 0; i < 5; i++)
{
scanf("%c", &str[i]);
}
for (int i = 0; i < 5; i++)
{
printf("%c", str[i]);
}
return 0;
}
有的朋友可能会说,可不可以直接输入且不使用循环呢?当然可以了,这样的话就需要使用到scanf("%s",str)了,类似于下面这个代码:
#include<stdio.h>
int main()
{
char str[5];
scanf("%s", str);
printf("%s", str);
return 0;
}
但是需要注意的是,使用这个代码时最多打印出连续输入的4位数【因为敲换行符(也就是回车键)那一刻换行符将占用一个空间】,比如输入“abcd”时,代码会正常运行,输入“abcde”时,代码可以报错提示“Run-Time Check Failure #2 - Stack around the variable 'str' was corrupted”,即栈堆拥挤,而且输入时检测到回车或者是说空格时,数组录用将会停止,比如仍然是这个代码,我们输入“a bc”时,仅仅只会打印“a”, 而且当出现空格时,无论后面输入多少个数字都不会提示栈堆拥挤,值得注意的是,该字符串的最后一位数一般是空字符,
比如当输入“12 s”时打印出str[2]的结果是“null”即为空字符,空格同理
(2)getchar:
getchar是用来输入单个字符的,值得注意的是getchar可以识别空格和换行符并且保存下来,就比如下面这个代码,当输入“g”他就会打印“g”,但如果输入“gg”时,他仍然会打印“g”,验证结果如下:
#include<stdio.h>
int main()
{
int i = getchar();
printf("%c", i);
return 0;
}
我们一般可以使用getchar来清空空格符(详情见末尾例
(3)gets:
gets可是一位大佬,它可以用来输入字符串并将其保存到一维数组当中,它的用法与scanf("%s",str)相似,故而gets仅仅可以用来作为“char”型的字符输入,也同样需要考虑输入结束时敲下空格也占用一个空间,使用方法与scanf("%s",str)一致,这里就不过多赘述了,注意:但是gets可以识别空格。
2,数组的输出
(1)printf:
提到输出那当然是我们初学c语言时第1个接触的好哥们“printf”了,这个是我们熟悉的好兄弟了,就不过多赘述了,上面的示例基本上也用的是printf来做的输出。
(2)putchar:
putchar也是用来输出单个字符的与printf("%c",a)相同,但个人感觉用的时候比较少,也有可能是我学艺不精,还没有到使用它的时候。
一般情况下我们使用getchar于putchar相联用,比如说下面的代码示例:
#include<stdio.h>
int main()
{
char a = getchar();;
char b = getchar();
putchar(a);
putchar(b);
return 0;
}
(3)puts:
puts是本人比较喜欢的一个输出执行代码了,因为它相当于是printf("%s ",str)了,puts可以直接将数组当中的数据进行输出,并且会进行自动换行,注意:puts当读到“ ”时会终止输出,比如说下面这张图片,理论上来说他应该会读取“ac1s2”,但是因为str[3]已经被替换成了“ ”,故而会在str[3]处进行终止,当然printf("%s ",str)也会遇到这样的情况,但如果说一定要打印出来的话,又可以用到我们的好兄弟(printf+for)了, 当然我们也可以使用(putchar+for)的组合,不过因为str[3]已经被替换成“ ”了,故而不会打印。
总结:
通过这篇文章,我们不难发现,无论是输入还是输出,基本上可以以scanf(输入)和printf(输出)来替换,所以再一次强调基础非常的重要呀,当然点赞也非常重要【Doge】
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击