问题标签 [format-specifiers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 为什么 %n 格式说明符对所有 scanf() 语句都正常工作,但在第一个语句中存储少一个?
%n
格式说明符,当在 a 中使用时,应将scanf()
函数已处理的格式字符串的字符数存储到类型的参数中int*
。根据定义:
The number of characters of the format string already processed is stored in the pointed location.
但是在我的程序中,除了第一个之外,它scanf()
在所有scanf()
s 中都有效。在我的程序中的所有 s 中,不包括第一个,它存储从控制台输入的字符总数的计数,包括换行符(Enter键)。但是在第一个scanf()
中,计数 比从控制台输入的字符和换行符的总数少一。
请解释这个异常,因为我无法检测到这个简单的错误真的很令人沮丧。
样本输出
为什么在第一次试验中我们得到“11”而不是“12”?这是我的疑问。
关键编辑
另一个发现。如果是第一个scanf()
,而不是使用Enter
键(换行符)来分隔输入的数字,如果我使用空格,很多空格,那么所有这些空格也会被计算在内。count
例如,我得到count=21
。这意味着换行符,空间,一切都在考虑之中。但为什么一审少一个?
c - 与 C 中 scanf() 中的 [ ] 转换说明符的逻辑不一致
请看一下这个代码片段:
输出:
对于输入abook
,从%9[a]
处失败并存储先前解析的+处。
然后解析剩余的行并存储刚才解析的+ at 。
请注意这里的2点: b
book
a
\0
line1
%9[^\n]
book
\0
line2
- 在存储解析后的输入时,由于是字符串的转换说明符
\0
,因此会在其末尾附加。%[]
%9[a]
失败时,b
没有scanf
退出。它只是继续扫描进一步的输入。
现在对于 input book
,应该从%9[a]
失败并且应该存储在因为这里没有被解析。然后应该解析剩余的行并且应该存储刚刚解析的+ at 。 b
book
\0
line1
%9[^\n]
book
\0
line2
现在,让我们看看到底发生了什么:
这里的返回值为 0,这意味着scanf
没有为任何变量赋值。scanf
简单地退出而不分配任何值。所以垃圾数据在line2
。在line1
这种垃圾数据的情况下,恰好是一个NULL
字符。
但这很奇怪!不是吗?
我的意思是如果在输入的第一个字符处失败则scanf
退出。%[...]
(即使scanf
语句中存在额外的转换说明符。)
但是如果在%[...]
除第一个字符之外的任何其他字符处同样失败,则scanf
只需继续扫描进一步的输入。(当然,如果有额外的转换说明符。)它不会退出。
那么为什么会出现这种不一致呢?为什么不让scanf
语句继续扫描输入(如果当然有额外的转换说明符)即使%[...]
在输入的第一个字符处失败?就像在其他情况下发生的一样。
这种不一致的背后有什么特殊原因吗?
c - 当我使用错误的格式说明符时会发生什么?
只是想知道当我在 C 中使用错误的格式说明符时会发生什么?
例如:
ios - 格式说明符
我想知道我在格式说明符中看到的一些东西。我看到的是这样的:
我测试了它并在日志中返回
这叫什么,03.1
之间的东西%f
?
c - 这个“#”在这里做什么
我想出了一个代码
这给出了输出:
首先,我认为#
它用于为0
输出添加前缀,但我错了,因为它在最后一个输出中的奇怪行为是在小数点后打印零。
有人可以解释这#
是什么以及它在这里做什么吗?
string-formatting - sprintf_s中格式控制说明符%016I64X是什么意思
这个 sprintf_s 命令中的格式控制说明符“%S\%016I64X%S”是什么意思?
据我所知,它定义了一个字符串,它将数字转换为十六进制格式的无符号 64 位整数。我想知道我是否正确?请帮我..
c++ - How to change the value of format specifier at runtime?
I am using sscanf in my project to copy strings from source buffer to target buffer. For example:
But this way of coding style is not accepted. What my manager want me to do is something like:
That means, he want me to provide format specifiers as well. (%11 in this case).
But, the problem is that source can be of varying length and I don't know how to write the correct format specifier for every varying length string.
c - 格式说明符 %02x
我有一个简单的程序:
我正在使用%02x
格式说明符来获取 2 个字符输出,但是,我得到的输出是:
虽然我期待它是:01010101
。
c - 具有不同格式说明符的 scanf 函数的不同行为
当我使用带有 %d 或 %f 的 scanf 时,它会跳过空白字符。另一方面,当与 %c 一起使用时,它会读取空白字符。有人可以详细说明为什么会发生这种情况吗?
使用 %d 或 %f 就像下面的代码一样,它会自动跳过空白字符
如果我读这样的输入
它会跳过空白字符。为什么 scanf 使用格式说明符显示不同的行为????
c - c 中 printf 语句中的 %.#s 格式说明符
请解释输出。%.#s
是什么printf()
意思?
输出: