发布网友 发布时间: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"Outcome:
热心网友 时间: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];//输入内容只要不是超过几行,都能装得下了