#include <stdio.h>
int main(void)
{
int n,j;
char i[10];
char c;
for(n=0;n<10;n++)
scanf("%c",&i[n]);
scanf("%c",&c);
for(n=0;n<10;n++)
{
if(i[n]==c)
{
i[n]=i[n+1];
for(j=n+1;j<10;j++)
{
i[j]=i[j+1];
}
}
}
for(n=0;n<9;n++)
printf("%c",i[n]);
return 0;
}
输入十个字符,再删除其中与我输入那个字符相同的的字符,不知道为什么我写的这个一直就是删除最后一个字符,求大神看下
字符数组中删除指定字符的方法:
输入一个字符串,以回车结束
输入指定字符
定义一个遍历字符串的下标变量和一个新的字符串下标变量
循环遍历字符串,
如果当前字符与指定字符不同,则将当前字符写入新下标位置,新下标+1 (相同则不处理)
遍历下标+1检测下一个
遇到字符串结束符,结束循环
循环结束后,新下标位置字符串结束符
输出新的字符串
参考代码:
我们还没学到指针来,主要是这个问题。
追答#include
int main(void)
{
int n,j=0;
int count=0;//用来记录除去c还剩下多少个数,然后存在a数组里面
char i[10],a[10];
char c;
for(n=0;n<10;n++)
scanf("%c",&i[n]);
scanf("%c",&c);
for(j=0;j<=9;j++)
{
if(i[j]==c)
continue;//如果i[j]==c则不做这次循环后面的部分,然后j++,进行下次循环
else
a[count++]=i[j];
}
for(n=0;n<count;n++)//打印
printf("%c",a[n]);
return 0;
}
————————————————————————
这个没用指针,指针可是c语言精髓,要好好学习哦~
而且数组越界是一个十分常见的错误,很多黑客都是根据这个漏洞进行攻击~所以一定要认真谨慎~
谢谢
本回答被提问者采纳根本原因是因为标准输入缓存区没有清除的缘故,赋值直接就有问题,我把char改成int了,你可以改回来一样的,我是为了方便调试
键盘缓冲区是什么东西啊?能够解释下吗,老师提了下,但是还是不是很懂。
还有个问题,我没有直接做循环,我先让i[n]=i[n+1],为什么是错误的,我觉得我逻辑是对了的啊。
追答额你都给别人给分了,虽然他扯了些没用的。还是给你解释清楚吧,建立输入输出缓冲区是由于CPU处理速度远大于I/O设备的读写速度,需要同步两者时候,所以先把数据放入缓冲区中,带CPU下次时间片空闲的时候再去缓冲区里读写,如果你直接去写for语句的时候,CPU在一个时间片不断读取数据,但是外设还处于wai态,所以导致不能正确读写,至于具体的原因,没仔细研究过为什么会隔一个读进来一个,可能和进程控制有关系。所以每次读写I/O设备你都清一下缓冲区,自己把操作系统的工作完成,就不会出现不同步的情况了。至于你那种写法也是可以,只不过麻烦一点,尽量完善逻辑,用逻辑来解决问题,而不是用代码。你这个还没牵扯到越界问题,一共10个地址,删掉1个,还能比10个多了去?
追问大神,谢谢你的指导