这是由于程序在读取数字时只读取了前面的数字部分,而把后面的回车符留在了键盘缓冲区,所以在下面读取字符串时遇到这个回车符就结束了,也就是说程序读到了一个空的字符串。另外,在下面复制字符串的时候并没有复制字符串的结束符。下面的代码改正了这些问题。
#include
#include
int main()
{ int n,m,j;
scanf("%d",&n);
char a[n+1]; //有更改
getchar(); //有更改,读取多余的回车符
gets(a); //读入最大串长为n的字符串
scanf("%d",&m);
char b[m+1]; //有更改
for(j=0; j
}
b[j]='\0';
printf("%s",b);
return 0; //有更改
}
输入n的时候的回车被gets(a)收到了,然后你认为输入a的时候的内容,被m接收了
gets()和scanf()不同gets()将回车之前的字符全部取走,之后将回车变成’\0’并且取走;
如果scanf()后面紧跟gets()那么要在两个之间加入getchar()取走回车
如
scanf("%c",&n);
getchar();
gets(str);