求C语言高手找错误

题目:假定输入的字符串中只包含字母和*号。请编写函数FUN,它的功能是:使字符串中尾部的*号不得多于N个;若多于N个,则删除多余的*号;若少于或等于N个,则什么也不做,字... 题目:
假定输入的字符串中只包含字母和*号。请编写函数FUN,它的功能是:使字符串中尾部的*号不得多于N个;若多于N个,则删除多余的*号;若少于或等于N个,则什么也不做,字符串中间和前面的*号不删除。
例如,字符串中的内容为****A*BC*DEF*G*******,若N的值为4,删除后,字符串中的内容则应当是****A*BC*DEF*G****;若N的值为7,则字符串中的内容仍为****A*BC*DEF*G*******。N的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <stdio.h>
#include <conio.h>
#include <string.h>
void fun(char *a , int n)
{
}
main()
{
char s[81];
int n;
FILE *out;
printf("Enter a string :\n");
gets(s);
printf("Enter n: ");
scanf("%d",&n);
fun( s,n );
printf("The string after deleted :\n");
puts(s);
out=fopen("out.dat", "w");
strcpy(s, "****A*BC*D**EF*G*********");
fun(s, 5);
fprintf(out, "%s", s);
fclose(out);
}
我的作答(背景为阴影部分):
#include <stdio.h>
void fun( char *a,int n )
{int i,j;
j=0;
char *p=a,*q=a;

for(;*p!='\0';p++);
for(;*p=='*';p--)j++;
p--;
for(;q<=p;q++)
*(a++)=*q;
if(j>=n)
{for(i=0;i<=n;i++)
*(a++)='*';}
if(j<n)
{for(i=0;i<=j;i++)
*(a++)='*';}
*a='\0';

}

main()
{ char s[81]; int n;
void NONO ( );
printf("Enter a string:\n");gets(s);
printf("Enter n : ");scanf("%d",&n);
fun( s,n );
printf("The string after deleted:\n");puts(s);
NONO();
}
void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *in, *out ;
int i, n ; char s[81] ;
in = fopen("in.dat","r") ;
out = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(in, "%s", s) ;
fscanf(in, "%d", &n) ;
fun(s,n) ;
fprintf(out, "%s\n", s) ;
}
fclose(in) ;
fclose(out) ;
}
程序报错:
--------------------Configuration: prog1 - Win32 Debug--------------------
Compiling...
prog1.c
C:\EXAM\00000000\prog1.c(5) : error C2143: syntax error : missing ';' before 'type'
C:\EXAM\00000000\prog1.c(7) : error C2065: 'p' : undeclared identifier
C:\EXAM\00000000\prog1.c(7) : error C2100: illegal indirection
C:\EXAM\00000000\prog1.c(8) : error C2100: illegal indirection
C:\EXAM\00000000\prog1.c(10) : error C2065: 'q' : undeclared identifier
C:\EXAM\00000000\prog1.c(11) : error C2100: illegal indirection
执行 cl.exe 时出错.

prog1.exe - 1 error(s), 0 warning(s)

请问我错在哪里?
展开
 我来答
百度网友1fc36d4
2012-07-13 · TA获得超过3128个赞
知道大有可为答主
回答量:1497
采纳率:100%
帮助的人:1813万
展开全部
void fun( char *a,int n )
{
int i,j;
char *p=a,*q=a;
j=0;
for(;*p!='\0';p++);
p--;/*上一循环语句结束后p指向'\0',往前移一个位置,指向最后一个元素*/
for(;*p=='*';p--) j++;
for(;q<=p;q++)
*(a++)=*q;
if(j>=n)
{
for(i=0;i<n;i++)
*(a++)='*';
}
else
{
for(i=0;i<j;i++)
*(a++)='*';
}
*a='\0';
}
百度网友e809dc2b2
2012-07-13
知道答主
回答量:30
采纳率:0%
帮助的人:9.8万
展开全部
for(;*p=='*';p--)j++;
p--;

请问你的这个语句是什么情况?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
點點wang
2012-07-13
知道答主
回答量:12
采纳率:0%
帮助的人:1.9万
展开全部
void fun( char *a,int n )
{int i,j;
j=0;
char *p=a,*q=a;

for(;*p!='\0';p++);//让p指向末尾,结束时指向的是'\0'
p--;
for(;*p=='*';p--)j++;//测试* 的个数,p从后边指向第一个不是*的字母
for(;q<=p;q++)
*(a++)=*q;
if(j>=n)
{for(i=0;i<=n;i++)
*(a++)='*';}
if(j<n)
{for(i=0;i<=j;i++)
*(a++)='*';}
*a='\0';

}
这是我给你改的,你试一下,有问题再说
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式