C语言有个很神奇的问题

#include<stdio.h>
int main()
{

void dele(char *p,char x);
char s1[100],x,*p,i;
printf("输入s1\n");
scanf("%s",s1);
printf("输入想删除的字符\n");
scanf(" %c",&x);
dele(s1,x);
return 0;
}
void dele(char *p,char x)
{
int i,j;
for(i=0,j=0;i<100;i++)
if(p[i]!=x)
p[j++]=p[i];
p[j]='\0';

printf("%s",p);
}

scanf(" %c",&x); 这个语句 %c前面是有空格一个的 但是我删除空格后 重新运行会 把我输入的字符串直接又复制到 想要删除的字符那里, 就是我根本不能输入我想删除的字符 我把字符串打完 他直接把我的字符串一字不差的帮我打印在想要删除的字符。。。怎么回事

哈哈,楼主也中枪了.

%s读取的特性:遇到空格(32)或换行(10)结束读入,而且 返回读入的空格||换行字符至输入流

再次读取的时候,%c是来者不拒的读取,因此,%c读取上次遗留的换行符,程序删除源语句中并不存在的换行符,程序结束...

可以写成scanf("%*c%c",&x);

即忽略此后的第一个字符

或者改为while(!x||x==10)scanf("%c",&x);

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网