代码如下:
#include<stdio.h>
#define MAX 20
void delchar(char* str, char c)
{
int i=0;
int j=0;
while (str[i] != '\0')//str[i]表示原来的字符串,指针变量str与数组首地址str等价;
{
if (str[i] != c)
{
str[j++] = str[i];//str[j++]也是一直往后走的
}
i++;
}
str[j] = str[i];//将'\0'赋上;
}
int main()
{
char str[MAX], c;
printf("输入需要删除的字符\n");
scanf("%c", &c);
getchar();//清除缓存中的'\0' ,保证输入字符c后,程序能继续输入字符串;
printf("输入字符串\n");
gets(str); //因为用scanf输入字符串是遇到空格和'\0'会直接结束,所以使用gets;?
delchar(str, c);
printf("输出字符串%s\n", str);
return 0;
}
学习笔记,关于getchar()函数
作用之一:可以使用getchar()去清理回车;
以下面代码为例
#include <stdio.h>
int main(void)
{
char m[40];
char n;
printf("输入字符串:\n");
scanf("%s",m);
getchar();
printf("输出字符串:%s\n",m);
printf("输入字符串中的一个字符 :\n");
scanf("%c",&n);
printf("输出字符串中的字符:%c\n",n);
return 0;
}
![](https://img-blog.csdnimg.cn/img_convert/cdf7eeb6b91d45475325839e85576720.png)
若去掉getchar();
![](https://img-blog.csdnimg.cn/img_convert/0a47019e25a95d5198901af69ef5d7a4.png)
原理:当我们在控制台缓存区输入abc并按下回车时,相当于输入了'a','b','c'和回车(enter)四个字符。
当输出字符串abc时,还有一个字符-回车(enter)还没有输出,它保存在控制台输入的缓冲区,而字符串abc着保存在了缓冲区(注意控制台输入的缓冲区和缓冲区不同),所以当进行到下一个scanf函数时,控制台输入的缓冲区中的回车(enter)输入到了这个scanf函数里了,取代了本该输入的字符,造成了第二种结果。
而getchar()函数的作用就是清除掉abc后面的缓存(回车enter),保证字符的输入。