gets()和scanf()函数的区别,以及对清空缓冲区概念的理解

scanf()

在一个字符串中遇到空格、回车、Tab结束,不接受遇到的空格、回车、Tab控制符后面的字符输入语句,将读入的是空格、回车、tab控制符。

如果想要读取可以采用%[]输入;

书写格式:%9[^\n],表示不包含\n,输入接受任何非回车字符,结束条件要么输入字符达到9个要么输入回车,如果超过9个则后面的会被省略

scanf(" %9[^\n] ", str );

问题:看下面一段代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
	char arr[10] = { 0 };
	char c = 0;
	scanf("%s", arr);
	c = getchar();
	printf("%s\n%c", arr, c);
	system("pause");
	return 0;
}
输出结果:

【现象】输完arr按回车准备输入c的时候程序直接结束,并且输出了arr,c为回车。

【解决方法】在多个输入型函数之间从在缓冲区概念,每次输入完一个函数都要清空缓冲区。具体解决方法如下:

(1)在scanf()后面再加一个没用的getchar(),用于接收回车,并丢弃。

(2)在scanf()后面加fflush(stdin);清空缓冲区。注:高等vs不适用

(3)万能法:在scanf()后面加一个

while (getchar() != '\n')
    {
        ;
    }
gets()

遇到回车结束,并吞掉回车符。下一个字符输入语句,将读入回车以后的字符。

例:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
	char arr[10] = { 0 };
	char c = 0;
	gets(arr);
	c = getchar();
	printf("%s\n%c", arr, c);
	system("pause");
	return 0;
}

结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_41318405

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值