C语言:连续的printf和scanf,scanf被跳过

连续的printf和scanf,scanf被跳过。首先只会跳过字符型%c不会跳过数值的输入。

先拿出例子,如下代码:

#include<stdio.h>
#include<stdlib.h>
void main()
{
	int a,b,j;
	char z;
	printf("请输入两个数\n");
	scanf("%d%d",&a,&b);
	printf("请输入运算符\n");
	scanf("%c",&z);
	switch(z)
	{
	case '+':printf("%d",(a+b));
		break;
	case '-':printf("%d",(a-b));
		break;
	case '*':printf("%d",(a*b));
		break;
	case '/':printf("%d",(a/b));
		break;

	}
	system("pause");

运行结果:

 发现运行结果跳过了第二个scanf(“%c”),但是第一个scanf(%d)并未被跳过,并且scanf被跳过后续需要该字符的代码自然也无用了。

解决方法:法一.  在scanf()中的%c前加上一个\n或者直接输入一个空格。

#include<stdio.h>
#include<stdlib.h>
void main()
{
	int a,b,j;
	char z;
	printf("请输入两个数\n");
	scanf("%d%d",&a,&b);
	printf("请输入运算符\n");
	scanf("\n%c",&z);
	switch(z)
	{
	case '+':printf("%d",(a+b));
		break;
	case '-':printf("%d",(a-b));
		break;
	case '*':printf("%d",(a*b));
		break;
	case '/':printf("%d",(a/b));
		break;

	}
	system("pause");
}

结果:

j

 法二. 在printf()和scanf()之间加一个getchar()。

#include<stdio.h>
#include<stdlib.h>
void main()
{
	int a,b,j;
	char z;
	printf("请输入两个数\n");
	scanf("%d%d",&a,&b);
	printf("请输入运算符\n");
	getchar();
	scanf("%c",&z);
	switch(z)
	{
	case '+':printf("%d",(a+b));
		break;
	case '-':printf("%d",(a-b));
		break;
	case '*':printf("%d",(a*b));
		break;
	case '/':printf("%d",(a/b));
		break;

	}
	system("pause");
}

结果: 

 原因:上述情况是因为输入数据后需要回车键才能将数据送入缓冲区,但是在该过程中回车键(换行符)刚好被下一个scanf()所捕获,所以解决方法就是选择方法来抵消这个回车键(换行符)。而第一个scanf()之所以没有该情况是因为第一个scanf为%d数据类型的输入函数,无法捕获回车键(换行符)等字符型。

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值