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;
}
展开
 我来答
夏天的小红花

2019-08-15 · TA获得超过4811个赞
知道大有可为答主
回答量:1万
采纳率:83%
帮助的人:702万
展开全部

这是由于程序在读取数字时只读取了前面的数字部分,而把后面的回车符留在了键败昌团盘缓冲区,所以在下面读取字符串时遇到这个回车符就结察橘束了,也就是说程序读到了一个空的字符串。另外,在下面复制字符串的时候并没有复制字符串的迅穗结束符。下面的代码改正了这些问题。
#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; //有更改
}

六翼幻世
2019-08-15 · 超过50用户采纳过TA的回答
知道小有建树答主
回答量:204
采纳率:53%
帮助的人:43.4万
展开全部
输雀搭入n的时候的回车被gets(a)收到了,然后顷改拿你认为输入a的歼扮时候的内容,被m接收了
gets()和scanf()不同gets()将回车之前的字符全部取走,之后将回车变成’\0’并且取走;
如果scanf()后面紧跟gets()那么要在两个之间加入getchar()取走回车

scanf("%c",&n);
getchar();
gets(str);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式