前言:

我们知道对一个字符数组进行输入与输出时会用到:
输入: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
#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\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】

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐