前言:
我们知道对一个字符数组进行输入与输出时会用到:
输入:scanf,getchar,gets
输出:printf,putchar,puts
然而可能还有很多的朋友对这些还不是很了解,今天让我们共同学习数组的输入与输出吧。
%c格式是用于输入单个字符的,其能够识别换行字符或者空格字符,并保存于字符数组当中;
%s格式是用来输入一个字符串的,其作用可以识别一个字符串的结束
目录
1,数组的输入:
(1)scanf:
(2)getchar:
(3)gets:
2,数组的输出
(1)printf:
(2)putchar:
(3)puts:
总结:
1,数组的输入:
(1)scanf:
一般情况下,scanf是可以直接使用的,但是有些编译器可能会报错,如果出现编译器报错,可以尝试在代码顶部添加:#define _CRT_SECURE_NO_WARNINGS
当我们输入多个字符且使用循环输入(类似于for)时注意,应使用“%c”,在这样的情况之下将可以正常读取空格键
#define _CRT_SECURE_NO_WARNINGS#includeint 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)了,类似于下面这个代码:
#includeint 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”,验证结果如下:
#includeint 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相联用,比如说下面的代码示例:
#includeint main(){char a = getchar();;char b = getchar();putchar(a);putchar(b);return 0;}
(3)puts:
puts是本人比较喜欢的一个输出执行代码了,因为它相当于是printf(“%s\n”,str)了,puts可以直接将数组当中的数据进行输出,并且会进行自动换行,注意:puts当读到“\0”时会终止输出,比如说下面这张图片,理论上来说他应该会读取“ac1s2”,但是因为str[3]已经被替换成了“\0”,故而会在str[3]处进行终止,当然printf(“%s\n”,str)也会遇到这样的情况,但如果说一定要打印出来的话,又可以用到我们的好兄弟(printf+for)了,当然我们也可以使用(putchar+for)的组合,不过因为str[3]已经被替换成“\0”了,故而不会打印。
总结:
通过这篇文章,我们不难发现,无论是输入还是输出,基本上可以以scanf(输入)和printf(输出)来替换,所以再一次强调基础非常的重要呀,当然点赞也非常重要【Doge】