字符一维二维输入输出问题(暂时的理解)

一维字符数组

scanf录入字符的话,回车空格都要吃,
当录入的字符达到要求数量的字符后,回车代表结束

二维字符数组(如何避免字符录入回车符也被吃进去)

#include<stdio.h>
int main()
{
	char perNum[100][5];
	int N,i,c;
	scanf("%d",&N);
	c=getchar();//吃掉第一个回车符
	int x;
	for( i= 0;i < N;i++)
	{
		for(x=0;x<5;x++)
		{
			scanf("%c",&perNum[i][x]);
		}
		c=getchar();//吃掉每行的回车符
	}
	for(i= 0;i < N;i++)
	{
		for(x=0;x<5;x++)
		{
		printf("--%c--",perNum[i][x]);
		}
		printf("\n");
	}
	return 0;
}

字符一维二维输入输出问题(暂时的理解)
如果没有c=getchar吃掉回车符的情况

字符一维二维输入输出问题(暂时的理解)
preNum[0][0]就是回车符,也就是回车符也当着字符吃进去
处理回车符
输入
2
qwert
asdfg
输出
qwert
asdfg

不处理回车符
输入
2
qwert
asdfg
输出
回车符qwer
t回车符asd
用c=getchar();或者scanf("%c",&c);都行

二维字符串输入

scanf字符串输入(空格回车作为分隔符,每次一输入结束)

#include<stdio.h>
int main()
{
	char a[10][5];
	int N,i,c;
	scanf("%d",&N);
	int x;
	for( i= 0;i < N;i++)
	{
		scanf("%s",a[i]);
	}
	for(i= 0;i < N;i++)
	{
		printf("%s\n",a[i]);
	}
	return 0;
}

字符一维二维输入输出问题(暂时的理解)
scanf中的%s会在字符串的最后一个字符后面加个空字符’\0’;如果空间满了,就不会加,输出%s第一行开始就不会结束,还要接着输出第二行,避免这种情况,空间多安排一位存’\0’;
字符一维二维输入输出问题(暂时的理解)

gets

#include<stdio.h>
int main()
{
	char a[10][6];
	int N,i,c;
	scanf("%d",&N);
	c=getchar();//吃掉第一个回车符
	int x;
	for( i= 0;i < N;i++)
	{
		gets(a[i]);
	}
	for(i= 0;i < N;i++)
	{
		printf("%s\n",a[i]);
	}
	return 0;
}

字符一维二维输入输出问题(暂时的理解)

如果不吃掉第一个回车符的话
字符一维二维输入输出问题(暂时的理解)
第一行字符串就是一个回车符
字符一维二维输入输出问题(暂时的理解)
用gets的话同样的,只有后面有多余的空间就会存一个空字符’\0’,gest不会录入回车符,但是会录入空格,回车一次表示录入一次结束

总结

一维字符数组输入scanf中%c吃空格吃回车
二维字符数组输入scanf中%s空格回车作为分隔符,每次一次输入结束
gets,会录入空格,一旦回车就代表本次录入结束。