C语言关于gets的问题(输入出现了问题)
这段代码是根据输出来写的,不想用指针,发现输入n和a后直接就结束了。想问问是为什么#include<stdio.h>#include<stdlib.h>intmain()...
这段代码是根据输出来写的,不想用指针,发现输入n和a后直接就结束了。想问问是为什么
#include <stdio.h>
#include<stdlib.h>
int main()
{
int n,m,j;
scanf("%d",&n);
char a[n];
gets(a);
scanf("%d",&m);
char b[m];
for(j=0;j<n-m+1;j++)
{
b[j]=a[j+m-1];
}
printf("%s",b);
return0;
} 展开
#include <stdio.h>
#include<stdlib.h>
int main()
{
int n,m,j;
scanf("%d",&n);
char a[n];
gets(a);
scanf("%d",&m);
char b[m];
for(j=0;j<n-m+1;j++)
{
b[j]=a[j+m-1];
}
printf("%s",b);
return0;
} 展开
2个回答
展开全部
这是由于程序在读取数字时只读取了前面的数字部分,而把后面的回车符留在了键败昌团盘缓冲区,所以在下面读取字符串时遇到这个回车符就结察橘束了,也就是说程序读到了一个空的字符串。另外,在下面复制字符串的时候并没有复制字符串的迅穗结束符。下面的代码改正了这些问题。
#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<n-m+1; j++)
{ b[j]=a[j+m-1];
}
b[j]='\0';
printf("%s",b);
return 0; //有更改
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询