c程序纠错

下面的程序是用指针从一行字符串中删除输入的字母。我编了如下:不知道错在什么地方。希望指教。紧急需要答案。
#include<stdio.h>
#include<string.h>
void main(void)
{ char a[20],*p,c;
char *delchr(char *p,char c);
printf("input the string:\n");
gets(a);
printf("the deltel character:\n");
c=getchar();
p=delchr(a,c);
puts(p);
}
char *delchr(char *p,char c)
{char *p1,a;
int flag=0;
p1=&a;
while(*p!='\0')
{ if(*p!=c)
{ p1=p++;
p1++;
flag++;
}
else
p++;
}
return p1-flag-1;
}

tanyuguo你说的不对,我下面的语句其实已包含了p1=p;如果向你那样的话。那么要是删除第一个字母,就没法删除了。

看来你对指针使用还是有所体会,但程序的错误之处在于:
!你没有把字符数组中的字符删除的操作
(应该有删除一个字符的操作:其后所有字符前移一位,加个内循环)
!没必要传入地址型参数还由函数返回数组地址
(函数可不用返回任何值,在数组中有所更改即可)
修改时自己把数组画个图来操作以免出错
温馨提示:内容为网友见解,仅供参考
第1个回答  2006-06-17
楼主你还没有完全弄清楚C语言里函数是怎样定义的。
虽然你在main里调用的是delchr(a,c),但delchr在定义时第一个参数你定义的是char *p,那么在delchr的函数体里面你就要用p来代替那个a。
因此,只要把delchr函数体的第一行改为char *p;然后把p1=&a改成p1=p就行了
第2个回答  2006-06-22
看不懂
第3个回答  2006-06-22
是什么呀
第4个回答  2006-06-22
char a[20],*p,c; //数组有数据溢出可能
char *delchr(char *p,char c); //error1
printf("input the string:\n");

c=getchar();
p=delchr(a,c); //error2
puts(p);

char *p1,a; //char *p1,a[21];
int flag=0;
p1=&a;

p1=p++; //*p1=*p++;

return p1-flag-1; //*p1='\0';memcpy(p1,p,strlen(p1));return p;

#include<stdio.h>
#include<string.h>

char *delchr(char *p,char c);
void main(void)
{ char a[20],*p,c;

printf("input the string:\n");
gets(a);
printf("the deltel character:\n");
c=getchar();
p=delchr(a,c);
puts(p);
}
char *delchr(char *p,char c)
{char *p1,a[21],*p2=p;
int flag=0;
p1=&a;
while(*p!='\0')
{ if(*p!=c)
{ *p1=*p++;
p1++;
flag++;
}
else
p++;
}

memcpy(a,p2,flag);
*(p2+flag)='\0';
p=p2;
return p;
}

c语言题目 转换大小写 程序纠错 哪里错了?
错误如下:第一处:for(i=0;str[i]<80;i++) 里面这个条件str[i]<80是错误的,这里是要判断str是否已经结束,所以应该写str[i]!='\\0',即for(i=0;str[i]!='\\0';i++)第二处:if('a'<=str[i]<='z'),在C里没有这样的写法,应该是if('a'<=str[i] && str[i]<='z')...

c语言计算从今天往后N天之后是哪一天(哪年哪月哪日)程序纠错?
for_e循环退出时多加的月数没有减掉。还有把for_d,for_e循环的终止条件小于等于号改成小于号 还有去掉for_d循环末尾的分号 改动的地方见注释,共八处(如图)

c语言编程中出现的纠错英文语句是啥意思?
编译错误信息 说明:Turbo C 的源程序错误分为三种类型:致命错误、一般错误和警告。其中,致命错误通常是内部编译出错;一般错误指程序的语法错误、磁盘或内存存取错误或命令行错误等;警告则只是指出一些得怀疑的情况,它并不防止编译的进行。 下面按字母顺序A~Z分别列出致命错误及一般错误信息,英汉对照及处理方法: (...

C语言程序代码纠错
无法编译成功是因为int a;的分号为中文状态下的分号,修改后的代码:include <stdio.h>#include <stdlib.h>int main(){ int a; scanf("%d",&a); printf("b=%d\\n",a); char h; scanf("%c",&h); printf("输入字符为%c\\n",h);system("pause");return 0;}随便...

求c语言代码纠错
程序的末尾少了分号。另外,分母上的“2a”少了括号。include <stdio.h> include <math.h> int main(){ double x1,x2,a,b,c;printf("已知方程ax^2+bx+c=0,请输入a,b,c\\n");scanf("%lf%lf%lf",&a,&b,&c);printf("方程为ax^2+bx+c=0\\n"); \/\/有改动 if (b*b-4....

c语言代码求纠错
首先要说的是,你的程序存在错误。1、你定义的max函数中定义的int型变量max的作用于只是该函数本身,所以在主程序中max(c,d)这一句的函数调用时没有任何意义的。2、printf("%d", max)这一句中的max是指什么呢?指的是max函数,还是你在max函数中定义的int型max变量,但是这两种不管是哪一种都是...

C语言 初学者 程序纠错 输入1 2 3回车 结果却输出-18……
不明白你在做什么,而且 printf("%d",&m); \/\/是打印m的内存地址,应该是 printf("%d",m);\/\/才对

自己写了个C程序,运行后全是“烫烫烫烫烫烫烫烫烫烫烫烫。。”,求大 ...
文件打开模式 改为 二进制模式 即 fopen("d:\\\\tmp.dat","wb"))fopen("d:\\\\tmp.dat","rb"))

c语言编程求纠错~~~
while(scanf("%d",&n)!=EOF){if(n==0)break;a=sg(n);if(a>=10)a=sg(a);printf("%d\\n",a);} 这个循环出错了,如果按你这个代码来执行的话,每次读入一个n的值,循环里都是只计算一次a的值,a的值要么是sg(n),要么是sg(a),然后继续读入新的n的值。要想满足“如果结果是两位...

求c语言代码纠错!!!
y,t) ((t)=(x),(x)=(y),(y)=(t))void sort(int [],int);int compare(int x,int y);int binsearch(int list[],int searchnum,int left,int right);int main(int argc, char* argv[]) {int i,n,m;int list[MAX_SIZE];printf("Enter the number of number to generate:...

相似回答
大家正在搜