开开卡丁车 发表于 2022-4-11 17:13:46

《带你学C带你飞》中scanf函数疑问

在带你学C带你飞中,关于scanf函数的描述是这样的

其中提到:空白字符:该函数将读取并忽略空白字符(空白字符包含空格、回车和制表符);

而我写了个代码测试了一下scanf自己会不会读取空白字符(比如空格字符):
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char ch;

    printf("请输入字符:");
    scanf("%c", &ch);
    printf("%d\n", ch);

    return 0;
}


结果是这样显示的:

这就说明scanf函数是可以读取空格字符的,那为什么会有“该函数将读取并忽略空白字符”的描述?

ba21 发表于 2022-4-11 22:43:50

首先空白字符包含空格、制表符 都是字符吗?
既然是字符,为什么%c , %s不能读取?


空白字符:该函数将读取并忽略空白字符(空白字符包含空格、回车和制表符);
是针对非字符格式而言,如%d,

开开卡丁车 发表于 2022-4-12 10:12:51

关于这个问题,从昨天的作业中我有一个猜想

数组那一节的作业有一道题是这样的

而那道题答案给出的代码中有一段这样的代码:
printf("请输入你的生日(如1988-05-20):");
scanf("%d-%d-%d", &year1, &month1, &day1);

我们再回头看scanf函数的说明:

划线部分解释了为什么上面那段代码中%d和%d之间要加 '-' 这样的短横线

那么关于忽略空白字符是不是如果我的scanf这么写:
scanf("%d %d %d", &year1, &month1, &day1);

所谓的忽略空白字符是忽略我在scanf函数的括号中的%d和%d中间输入的空格,而不是键盘缓冲区中存储的代表空格的字符。

这是我根据作业答案的一个猜想,究竟是不是这样的还请大佬解答。
页: [1]
查看完整版本: 《带你学C带你飞》中scanf函数疑问