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

#include "stdio.h"
#include "string.h"
#include "math.h"
int main()
{int z;
char a[10],b[10];
scanf("%d",&z);
if(z%2==0)
{gets (a);
gets (b);
puts(strcat(a,b));}
else
printf("sad");
}
为什么在输出b的时候直接跳过了,求大神帮忙,与之近似的是,我把if条件统统去掉,就正确了
#include "stdio.h"
#include "string.h"
#include "math.h"
main()
{char a[10],b[10];
gets (a);
gets (b);
puts(strcat(a,b));}
求各位帮帮忙啊!

读入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");
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-22

原因是前面输入了一个整数之后,在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

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

char a[256],b[256];//输入内容只要不是超过几行,都能装得下了
第3个回答  2013-04-22
在gets(a);前面加fflush(stdin); 清除输入缓冲区中的内容,也就是 scanf遗留下的 回车键本回答被提问者采纳
第4个回答  2013-04-22
缓冲区问题 没考虑到缓冲区 你所输入的都会存到缓冲区 包括回车 所以会把回车当作一个字符串存到a中追问

那是不是我第一个a[10]就是一个回车字符?

追答

恩 可以用清除缓冲区的fflush 具体用法百度吧 手机党伤不起

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网