解决c语言中scanf("%c",&c)吃掉回车或者空格字符的问题
#include <stdio.h>
int main()
{
	int i;
	char *p;//有十个元素的字符数组
	for(i=0;i<10;i++){
		scanf("%c",(p+i));
	}
	for(i=6;i<10;i++)
		*(p+i)='#';
	for(i=0;i<10;i++)
		printf("%c",p[i]);
	return 0;
}

这是一个运用指针编写的程序,对具有十个元素的字符型数组,从下标为6的元素开始全部设置为“#”

实际运行发现,scanf吃掉了输入的字符后的空格或者回车,导致输出结果


  1. (1)用getchar()清除 
  2. (2)用"%1s"来限制 
  3. (3)在%c前加一个空格变成" %c"来"吃掉" 
  4. (4)用函数fflush(stdin)清除全部剩余内容 

这是我们搜索到的几种方法

(1)

#include <stdio.h>
int main()
{
	int i;
	char *p;//有十个元素的字符数组
	for(i=0;i<10;i++){
		scanf("%c",(p+i));
		getchar();
	}
	for(i=6;i<10;i++)
		*(p+i)='#';
	for(i=0;i<10;i++)
		printf("%c",p[i]);
	return 0;
}

输出结果:


(2)

#include <stdio.h>
int main()
{
	int i;
	char *p;//有十个元素的字符数组
	for(i=0;i<10;i++){
		scanf("%1s",(p+i));
	}
	for(i=6;i<10;i++)
		*(p+i)='#';
	for(i=0;i<10;i++)
		printf("%c",p[i]);
	return 0;
}

输出结果:


(3)

#include <stdio.h>
int main()
{
	int i;
	char *p;//有十个元素的字符数组
	for(i=0;i<10;i++){
		scanf(" %c",(p+i));
	}
	for(i=6;i<10;i++)
		*(p+i)='#';
	for(i=0;i<10;i++)
		printf("%c",p[i]);
	return 0;
}

输出结果:


(4)fflush(stdin)容易出错,最好别用,也不规范。

详细的下次再做探讨

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

解决c语言中scanf("%c",&c)吃掉回车或者空格字符的问题

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭