问题标签 [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.

0 投票
1 回答
3927 浏览

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。这意味着换行符,空间,一切都在考虑之中。但为什么一审少一个?

0 投票
2 回答
297 浏览

c - 与 C 中 scanf() 中的 [ ] 转换说明符的逻辑不一致

请看一下这个代码片段:

输出:

对于输入abook,从%9[a]处失败并存储先前解析的+处。 然后解析剩余的行并存储刚才解析的+ at 。 请注意这里的2点: bbooka\0line1
%9[^\n]book\0line2

  1. 在存储解析后的输入时,由于是字符串的转换说明符 \0,因此会在其末尾附加。%[]
  2. %9[a]失败时,b没有scanf退出。它只是继续扫描进一步的输入。

现在对于 input book,应该从%9[a]失败并且应该存储在因为这里没有被解析。然后应该解析剩余的行并且应该存储刚刚解析的+ at 。 bbook\0line1%9[^\n]book\0line2

现在,让我们看看到底发生了什么:
这里的返回值为 0,这意味着scanf没有为任何变量赋值。scanf简单地退出而不分配任何值。所以垃圾数据在line2。在line1这种垃圾数据的情况下,恰好是一个NULL字符。

但这很奇怪!不是吗?
我的意思是如果在输入的第一个字符处失败则scanf退出。%[...](即使scanf语句中存在额外的转换说明符。)
但是如果在%[...]除第一个字符之外的任何其他字符处同样失败,则scanf只需继续扫描进一步的输入。(当然,如果有额外的转换说明符。)它不会退出。

那么为什么会出现这种不一致呢?为什么不让scanf语句继续扫描输入(如果当然有额外的转换说明符)即使%[...]在输入的第一个字符处失败?就像在其他情况下发生的一样。
这种不一致的背后有什么特殊原因吗?

0 投票
2 回答
3029 浏览

c - 当我使用错误的格式说明符时会发生什么?

只是想知道当我在 C 中使用错误的格式说明符时会发生什么?

例如:

0 投票
3 回答
7868 浏览

ios - 格式说明符

我想知道我在格式说明符中看到的一些东西。我看到的是这样的:

我测试了它并在日志中返回

这叫什么,03.1之间的东西%f

0 投票
5 回答
329 浏览

c - 这个“#”在这里做什么

我想出了一个代码

这给出了输出:

首先,我认为#它用于为0输出添加前缀,但我错了,因为它在最后一个输出中的奇怪行为是在小数点后打印零。
有人可以解释这#是什么以及它在这里做什么吗?

0 投票
1 回答
1101 浏览

string-formatting - sprintf_s中格式控制说明符%016I64X是什么意思

这个 sprintf_s 命令中的格式控制说明符“%S\%016I64X%S”是什么意思?

据我所知,它定义了一个字符串,它将数字转换为十六进制格式的无符号 64 位整数。我想知道我是否正确?请帮我..

0 投票
4 回答
945 浏览

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.

0 投票
4 回答
141214 浏览

c - 格式说明符 %02x

我有一个简单的程序:

我正在使用%02x格式说明符来获取 2 个字符输出,但是,我得到的输出是:

虽然我期待它是:01010101

0 投票
1 回答
181 浏览

c - 具有不同格式说明符的 scanf 函数的不同行为

当我使用带有 %d 或 %f 的 scanf 时,它会跳过空白字符。另一方面,当与 %c 一起使用时,它会读取空白字符。有人可以详细说明为什么会发生这种情况吗?

使用 %d 或 %f 就像下面的代码一样,它会自动跳过空白字符

如果我读这样的输入

它会跳过空白字符。为什么 scanf 使用格式说明符显示不同的行为????

0 投票
3 回答
7026 浏览

c - c 中 printf 语句中的 %.#s 格式说明符

请解释输出。%.#s是什么printf()意思?

输出: