一直在报错 不知道为什么

C语言 码拜 9年前 (2016-04-04) 867次浏览
# include <stdio.h>
# include <string.h>
void fun1(char *s1);
int main()
{
int n;
scanf(“%d”, &n);
char s1[100000];
while (n–)                     假如去掉这个while就没事  一加上程序就停止工作 不知道为什么
{
gets(s1);
fun1(s1);
}
return 0;
}
void fun1(char *s1)
{
char s2[50000];
int i, j, len, temp;
len = strlen(s1);
if (1 == len)
{
temp = s1[0] – “0”;
temp %= 9;
s2[0] = temp + “0”;
s2[1] = “\0”;
}
else
{
for (i=0, j=0; i<len-1; i+=2)
{
temp = (s1[i]-“0”)*10 + s1[i+1]-“0”;
temp %= 9;
s2[j++] = temp + “0”;
}
if (len % 2 != 0)
{
s2[j++] = s1[len-1];
}
s2[j] = “\0”;
}
len = strlen(s2);
if (1 == len)
printf(“%s\n”, s2);
else
fun1(s2);
}
解决方案

40

你scanf(“%d”, &n);以后,输入缓冲区会有遗留的回车符,会被gets读走
所以scanf后面加一句fflush(stdin);才行

# include <stdio.h>
# include <string.h>
void fun1(char *s1);
int main()
{
	int n;                             
	scanf("%d", &n);
	fflush(stdin);
	char s1[100000];
	while (n--)                     //假如去掉这个while就没事  一加上程序就停止工作 不知道为什么
	{
		gets(s1);
		fun1(s1);
	}
	return 0;
}
void fun1(char *s1)
{
	char s2[50000];
	int i, j, len, temp;
	len = strlen(s1);
	if (1 == len)
	{
		temp = s1[0] - "0";
		temp %= 9;
		s2[0] = temp + "0";
		s2[1] = "\0";
	}
	else
	{
		for (i=0, j=0; i<len-1; i+=2)
		{
			temp = (s1[i]-"0")*10 + s1[i+1]-"0";
			temp %= 9;
			s2[j++] = temp + "0";
		}
		if (len % 2 != 0)
		{
			s2[j++] = s1[len-1];
		}
		s2[j] = "\0";
	}
	len = strlen(s2);
	if (1 == len)
		printf("%s\n", s2);
	else
		fun1(s2);
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明一直在报错 不知道为什么
喜欢 (0)
[1034331897@qq.com]
分享 (0)