十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
编译了一下你的代码,报告4个错误,主要是两个子函数没有在主函数调用前声明,
成都创新互联公司主营东山网站建设的网络公司,主营网站建设方案,成都App定制开发,东山h5成都小程序开发搭建,东山网站营销推广欢迎东山等地区企业咨询
调整后显示函数调用参数不匹配,又修改调用参数,改后代码与相应注释如下:
#includestdio.h
#includestring.h
#define ERROR 0
//子函数的声明,以避开文中编译遇到的redefinition;错误
void Nizhi(char *a);
//子函数的声明,同上
int Index(char *a,char *b,int n1,int n2);
int main()
{
int m,n,p,q,len1,len2;
char A[100];
char B[100];
while(gets(A))
{
gets(B);//输入字符串A,B//
len1=strlen(A);//得到两个字符串的长度//
len2=strlen(B);
p=Index(A,B,len1,len2);//查找逆置前字符串在A中出现次数//
Nizhi(B);
//q=Index(A[len1-1],B[len2-1],len1,len2);编译报告传入参数与函数定义形参不匹配,故改为地址
q=Index(A[len1-1],B[len2-1],len1,len2);//查找逆置后字符串在A中出现次数//
p+=q;
printf("%d\n",p);
}
return 0;
}
void Nizhi(char *a)
{
int i,j;
j=strlen(a);
char m;
for(i=0;ij/2;i++)
{
m=a[i];
a[i]=a[j-i-1];
a[j-i-1]=m;
}
}
int Index(char *a,char *b,int n1,int n2)
{
int i,j,k;
int num=0;
for(i=0;in1-n2+1;i++)
{
for(j=0,k=i;b[j]==a[k]; k++,j++)
{
if(j==n2)
num++;
}
}
return num;
}
供参考。
注意,改后虽编译通过,未验证整个程序逻辑的正确性。
哈哈,我看出来了,你是用vc编译的吧,看dos.h头文件,这是tc编译器的头文件,支持的暂停为delay()函数,如果用vc编译,那么就是用的windows环境下的32位编程,所以就应该加入windows.h这个头文件,告诉vc编译器这个名字空间,错误提示是由于你的sleep()函数中s要大写,改成大写就能编译通过了。
希望对你有所帮助。
#includestdio.h
int func1(int m,int n)
{
int a;
while(n!=0)
{
a=m%n;
m=n;
n=a;
}
return(m); //这里应该返回m,如果返回a就一直是0
}
int func2(int x,int y)
{
return(x*y/func1(x,y));
}
int main()
{
int j,k;
printf("请输入两个整数:");
scanf("%d%d",j,k);
printf("两个数的最大公约数为%d,两个数的最小公倍数为%d",func1(j,k),func2(j,k));
return 0;
}
首先,你定义的那些函数,最好改为void printst(void),下面那几个也一样,因为这样很容易让人知道你写的函数是什么类型。另外,自己写函数,有 申明过程,就是说,因为你的main在你写的函数的前面,编译器无法知道你的main函数里printst()这些是什么意思,所以,在main前面你要申明,即加上void printst(void);意思是告诉编译器,这个函数已经有了。。。你上面写了3个,我这里只说了一个,每个都要那样。。。
#include stdio.h
int prime(int n) //一般声明在主函数前,而且有参数的要写好参数
void main()
{
int n;
printf("\ninput an integer:");
scanf("%d",n);
if(prime(n))
printf("\n %d is a prime.\n",n);
else
printf("\n %d is not a prime. \n",n);
}
int prime(int n) //要和声明的函数格式一致
{
int flag=1,i;
for(i=2;in/2 flag==1;i++)
{
if(n%i==0)
flag=0;
}
return(flag);
}