首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事

c语言if里用gets,求帮忙,简单的题瞅了一个上午没看出来……

发布网友 发布时间:2024-10-20 04:06

我来回答

5个回答

热心网友 时间:2024-10-20 04:01

读入z的时候没有把回车符读掉,造成a会读到空串。下面这样就行了。
#include "stdio.h"
#include "string.h"
#include "math.h"
int main()
{int z;
char a[10],b[10];
scanf("%d\n",&z);
if(z%2==0)
{gets(a);
gets(b);
puts(strcat(a,b));}
else
printf("sad");
}

热心网友 时间:2024-10-20 04:06

缓冲区问题 没考虑到缓冲区 你所输入的都会存到缓冲区 包括回车 所以会把回车当作一个字符串存到a中

热心网友 时间:2024-10-20 04:07

在gets(a);前面加fflush(stdin); 清除输入缓冲区中的内容,也就是 scanf遗留下的 回车键

热心网友 时间:2024-10-20 04:07

原因是前面输入了一个整数之后,在Input Buffer取走了整数与换行符,但是回车符却留下来了,导致第一个gets()直接取用Input Buffer时误以为直接结束了:

#include "stdio.h"
#include "string.h"
#include "math.h"
int main()
{
int z = 0;
char a[10],b[10];
scanf("%d",&z);
if(z%2==0)
{
char c = getchar();
printf("getchar() = %c = %d\n", c, c);
gets (a);
printf("a = %s\n", a);
gets (b);
printf("b = %s\n", b);
puts(strcat(a,b));
}
else
printf("sad");
return 0;
}

Outcome:


2
getchar() =
= 10
12
a = 12
34
b = 34
1234

热心网友 时间:2024-10-20 04:00

程序是先从键盘读一个整数,依此数的奇偶来做不同的处理,
偶数时,再读两行内容,着把两行内容拼成一个串输出
奇数时则直接输出"sad"三个字符的短串
这里,输入会是大问题,1当一开始不输入整数而直接是字行串时,整数z未被赋值,变量未初始化就读取,早期的TC版本不会报错,较新的VS会检查到这个错并运行中报错的
两个串a 和 b都只分配了10个字符,当输入的单行内容大于9字符时,会有写内存越界,两行内容长度大于20时,拼串的函数会出错
char a[10],b[10];
==>

char a[256],b[256];//输入内容只要不是超过几行,都能装得下了

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com