进击的小白——知识点:scanf与getchar、gets的区别

scanf输入需要注意的问题

分两类来解释,字符类型(char)和数值类型(int、float、double等)。

用scanf输入数值类型(int、float、double等)

空格、回车、Tab键不会中断输入,scanf从第一个非空格/回车数值开始录入,即不管中间有多少空格有多少回车,都不会中断scanf的录入,除非到达scanf中规定的录入数量。实际上在录入数值的时候,中间必须有空格或回车来间隔不同的数值。
例:

int a = 0, b = 0, c = 0, d = 0;
scanf("%d%d%d%d", &a, &b, &c, &d);
printf("a = %d, b = %d, c = %d, d = %d", a, b, c, d);

用以下四种方式输入(□表示空格,⚪表示回车):

  1. 1□2□3□4
    在这里插入图片描述
  2. 1□□□2□□3□4
    在这里插入图片描述
  3. 1⚪2□□□3⚪4
    在这里插入图片描述
  4. ⚪1⚪2⚪⚪3⚪⚪4
    在这里插入图片描述
    最终程序输出的都是:
    在这里插入图片描述
scanf输入字符类型(char)

有两种形式:

  • scanf时“%c”前面有空格
char a, b;
scanf(" %c %c", a, b);
printf("a = %c, b = %c", a, b);

这种情况跟scanf输入数值类型的情况相同,scanf从第一个非空格/回车字符开始录入。

  • scanf时“%c”前面没有空格
char a, b;
scanf("%c%c", a, b);
printf("a = %c, b = %c\n", a, b);
printf("a = %d, b = %d", a, b);

这种情况scanf会将键盘录入的任何一个键入都作为录入(空格看作空白字符,回车看作换行符),多余的部分存入缓存区。(第四行代码是为了查看空格和回车是以什么形式存在字符变量中的)
例:

  1. □b
    在这里插入图片描述
  2. ⚪b
    在这里插入图片描述
  3. a⚪
    在这里插入图片描述
  4. □⚪
    在这里插入图片描述
  5. a□b
    在这里插入图片描述

首先了解一下,在ASCII中,空字符对应的十进制为32,换行“\n”对应的十进制为10,从以上举例中可以看出,空格和回车都被当做输入,空格作为空字符、回车作为换行存在字符变量中,如果有多余的输入,存在缓存区中。

输入字符串时

scanf

当它遇到空格、回车、或者Tab键时,都会自动停止输入,剩余部分存入缓冲区。
例:

char s[100];
scanf("%s", s);
printf("%s", s);

输入“abc□def”,输出为“abc”
在这里插入图片描述

gets

gets()主要用来接收字符串,可以接收空格,遇到‘\n’时结束,但不接收‘\n’,把 ‘\n’留存输入缓冲区;把接收的一串字符存储在形式参数指针指向的空间,并在最后自动添加一个’\0’。

getchar

getchar()主要用来接收单个字符,不管是空格或者回车都可以接收。例如:(c = getchar()) != ’\n’ 则表示遇到回车的时候结束接收字符。则表示遇到回车的时候结束接收字符。

列举几种输入字符串的方式
char s[100];
int i = 0;

scanf("%s", s);  //不能接收空格也不能接受‘\n’

gets(s);  //可以接收空格,但不能接受‘\n’,以‘\n’为结束

while ((s[i++] = getchar()) != '\n');  //可以接收空格也可以接收‘\n’,此处以‘\n’结束
s[i] = '\0';

do
{
	scanf("%c", &s[i]);
} while (s[i++] != '\n');  \\要想用scanf来接收空格和‘\n’,需要用循环让scanf一个一个字符的接收,此处以‘\n’结束
s[i] = '\0';
  • 75
    点赞
  • 236
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值