我试图理解scanf和输入缓冲区之间的关系。我将scanf与以下格式字符串一起使用:
int z1,z2;
scanf("%d %d", &z1,&z2);
并尝试理解为什么我可以输入尽可能多的空白(输入,空白,选项卡)后,我输入一个数字,如54,并按回车键。
据我所知,我按下的每一个键都会被放入输入缓冲区,直到我按下回车键。
因此,如果我输入54并按Enter键,输入缓冲区包含3个元素,两个数字和换行符。所以我的缓冲区看起来像[5][4][\n]
现在从左到右计算scanf/formatstring。所以第一个%d匹配到54,54被存储在z1中。
由于格式字符串中有空格,按第一个enter键导致的换行符(\n)被“消耗”。
因此,在计算第一个%d和空格(\n)后,缓冲区再次为空。
现在scanf尝试计算格式字符串中的第二个(也是最后一个)%d。因为缓冲区现在是空的,scanf等待进一步的用户输入(用户输入=在我的案例键盘中从标准输入读取)。
因此,缓冲区状态/操作序列是
缓冲区空-
我理解得对吗?(对不起,英语不是我的母语)
问候
据我所知,我按下的每一个键都会被放入输入缓冲区,直到我按下回车键。
对的按Enter键将数据刷新到标准输入流中。请注意,它还将\n
发送到stdin
中。
因此,如果我输入54并按Enter键,输入缓冲区包含3个元素,两个数字和换行符。所以我的缓冲区看起来像[5][4][\n]
对
现在从左到右计算scanf/formatstring。所以第一个%d匹配到54,54被存储在z1中。
正当
由于格式字符串中有空格,按第一个enter键导致的换行符(\n)被“消耗”。
正确。
因此,在计算第一个%d和空格(\n)后,缓冲区再次为空。
对
现在scanf试图计算格式字符串中的第二个(也是最后一个)%d
不完全是。
两个%d
之间的空格是空白字符,scanf
格式字符串中的空白字符指示scanf
扫描并丢弃所有空白字符(如果有),直到第一个非空白字符。这可以在C11标准的委员会草案n1570中看到:
7.21.6.2 fscanf功能
[...]
这意味着执行仍然在%d
s之间的空格中,因为它还没有遇到非空白字符。
因为缓冲区现在是空的,所以scanf等待进一步的用户输入(用户输入=在我的键盘中从标准输入读取)。
对
所以
缓冲区空-
应该是
“缓冲区为空-
请注意,当%d
之间(在%d
之前)有许多空白字符或没有空白字符时,scanf
的行为方式相同,因为%d
已经跳过了前导空白字符。事实上,只有%c
,%[
和%n
的格式说明符是重要的,如n1570所示:
7.21.6.2 fscanf功能
[...]
输入就是将程序外部的数据输入到程序内部,输出就是将程序内部运行的结果等内容从程序内部输出到显示器,打印机或者存放到文件中。 编程语言中的输入输出担负着程序与用户的交互工作。 1. 标准输入输出 C 语言中的标准输入输出包含 3 部分。标准输入,标准输出,标准错误输出。 表中列举了标准输入输出和与之关联的物理设备。 输入输出 设备 标准输入 键盘 标准输出 显示器屏幕 标准错误输出 显示器屏幕 标准
本文向大家介绍C语言中scanf()和gets()之间的区别,包括了C语言中scanf()和gets()之间的区别的使用技巧和注意事项,需要的朋友参考一下 在C语言中,都定义了和函数,以从外部源获取输入并将其作为输入传递给系统。现在,两个功能之间存在一些特性差异。 以下是和之间的重要区别- 序号 键 scanf()函数 gets()函数 1 定义 该方法可以从键盘读取输入,并根据给定的格式说明符将
问题内容: 我碰到一行,命令的输出已完全缓冲。这是什么意思? 问题答案: 在线C11标准 7.21.3 / 3: 当流没有 缓冲时 ,字符应尽快从源或目标出现。否则,字符可能会作为块被累积并传输到主机环境或从主机环境传输。当流被 完全缓冲时 ,打算在填充缓冲区时将字符作为块与主机环境进行传输。当流被 行缓冲时 ,当遇到换行符时,字符打算作为块与主机环境进行传输。此外,当填充缓冲区,在无缓冲流上请求
本文向大家介绍C语言使用scanf连续输入字符串出现的问题,包括了C语言使用scanf连续输入字符串出现的问题的使用技巧和注意事项,需要的朋友参考一下 一段看上去很简单的代码,即使是C语言初学者也能看懂。 可是在运行的时候却出现了问题: ①输入a后按下回车 ②用空格隔开之后再按下回车 相信和我一样的大部分初学者,看着自己天衣无缝的代码,百思不得其解。 让我们先来看看,在百度百科中,对于scanf函
问题内容: 今天,我了解到,将stdout设置为terminal并在不同情况下进行缓冲时,它是行缓冲的。因此,在正常情况下,如果我使用printf()而不以“ \ n”结尾,则仅在缓冲区已满时才在屏幕上打印它。如何获得此缓冲区的大小,这有多大? 问题答案: 实际大小由各个实现定义;该标准并没有规定最小大小(无论如何,基于我已经能够找到的大小)。没有关于如何确定缓冲区大小的线索。 编辑 章节: 7.
主要内容:再谈 if 语句的判断条件在上节《 C语言if else语句》中看到,if 的判断条件中使用了 、 、 等符号,它们专门用在判断条件中,让程序决定下一步的操作,称为 关系运算符(Relational Operators)。 关系运算符在使用时,它的的两边都会有一个表达式,比如变量、数值、加减乘除运算等,关系运算符的作用就是判明这两个表达式的大小关系。注意,是判明大小关系,不是其他关系。 C语言提供了以下关系运算符: 关系运