字符一维二维输入输出问题(暂时的理解)
一维字符数组
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,会录入空格,一旦回车就代表本次录入结束。