C语言一道模拟题 编程题 主要是fun函数有问题

规定输入的字符串中只包含字母和*号。编写函数fun,其功能是:除了字符串前导和尾部的*号外,将串中其它的*号全部删除。形参h已指向字符串中第一个字母,形参p指向字符串的中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。
例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****ABCDEFG********。在编写函数时,不得使用C语言提供的字符串函数。

#include <stdio.h>
void fun( char *a, char *h,char *p )
{int i=0;
char *q=a;
while(q<h) /*判断前导*号的结束*/
{
a[i]=*q;
q++;
i++;
}
while(q<p) /*删除除了字符串前导和尾部的*号*/
{if(*q!='*')
{a[i]=*q;
i++;
}
q++;
}
while(*q)
{
a[i]=*q;
i++;
q++;
}
a[i]='\0';
}
main()
{ char s[81],*t, *f;
void NONO ( );
printf("Enter a string:\n");gets(s);
t=f=s;
while(*t)t++;
t--;
while(*t=='*')t--;
while(*f=='*')f++;
fun( s , f,t );
printf("The string after deleted:\n");puts(s);
NONO();
}
void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *in, *out ;
int i ; char s[81], *t, *f ;
in = fopen("in.dat","r") ;
out = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(in, "%s", s) ;
t=f=s;
while(*t)t++;
t--;
while(*t=='*')t--;
while(*f=='*')f++;
fun(s, f, t);
fprintf(out, "%s\n", s) ;
}
fclose(in) ;
fclose(out) ;
}
fun函数 还是系统给的正确答案,可结果就是不对

void  fun( char *a, char *h,char *p )
{
 int i=0;
 char *q=a;
 while( q<h )
 {
  a[i]=*q;
  q++;
  i++;
 }
 while(q<p)
 {
  if(*q!='*')
  {
   a[i]=*q;
   i++;
  }
  q++;
 }
 while(*q)
 {
  a[i]=*q;
  i++;
  q++;
 }
 a[i]='\0';
}

追问

这是为什么,因为是C语言的注释吗

追答

注释影响了内容,我测试的时候直接跳过了第一个while应该是*号的问题

追问

我也觉得是第一个while 没有运行, 但我没料到是注释引起的。 哦 是因为C语言的注释 不行, 改用C++的注释方法就对了 谢了

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答