解决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)容易出错,最好别用,也不规范。

详细的下次再做探讨

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

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭