C语言中scanf循环读取

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	//scanf循环读取
	int i;
	while (scanf("%d", &i))
	{
		printf("i=%d\n", i);
	}
	return 0;
	
}

上面代码运行结果如图:

 但是我们会发现只用while的时候在黑窗口不知道怎样让程序停止

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	//scanf循环读取
	//scanf()的返回值是成功赋值的变量数量,发生错误时返回EOF
	//直接在代码输入EOF,ctrl+左键可以查看EOF的值为-1

	//什么情况下scanf会出错?-->三次行首输入ctrl,z回车

	int i;
	while (scanf("%d", &i)!=EOF)
	{
		printf("i=%d\n", i);
	}
	return 0;
}

 三次行首输入ctrl,z回车,运行结果如下:

 还是上面的代码,如果我们第一次在控制台输入10,点回车,控制台会打印i=10,接着我们输入a,会看到控制台会不停的打印i=10,如图所示:

解释如下:

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	//清空缓冲区 VS2012用fflush(stdin)
	//stdin是标准输入
	//VS2013-VS2019清空标准输入缓冲区用rewind

	int i,ret;
	while (rewind(stdin),(ret = scanf("%d", &i))!=EOF)
	{
		printf("i=%d\n", i);
	}
	return 0;
}

清空缓冲区之后就不会疯狂打印了,运行截图:

用三次行首ctrl,z回车结束scanf

 scanf混合输入数据

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	//scanf多种数据的混合输入,混合输入时每次在%c之前加入一个空格
	//一个scanf读三种不同类型的数据
	int i;
	char c;
	float f;
	scanf("%d %c%f", &i, &c, &f);
	printf("i=%d,c=%c,f=%f\n", i, c, f);
	return 0;
}
由上述浮点数输出结果可看出默认保留了6位小数,看起来不太美观,可以加入如下图所示代码,让输出结果美观一点,代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	//scanf多种数据的混合输入,混合输入时每次在%c之前加入一个空格
	//一个scanf读三种不同类型的数据
	int i;
	char c;
	float f;
	scanf("%d %c%f", &i, &c, &f);
	printf("i=%d,c=%c,f=%4.1f\n", i, c, f);
	return 0;
}

运行结果:

 f=%4.1f代表删除的浮点数占4个空格的位置(加上小数点),1代表小数点后显示1位

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值