好的,我正在玩一些代码,尝试了解一些技巧以及它是如何工作的,所以我不明白这段代码的输出
int i = 8;
printf("%d", printf("%o", i));
这个结果是102,我不知道怎么样,我知道八进制中的8是10,但最让我困惑的是当我在这样%o
之后放空格时
printf("%d", printf("%o ", i));
现在,结果是10 3,这里发生了什么?
答案 0 :(得分:5)
外部printf()
将打印内部C11
的返回值。
引用fprintf
,章节§7.21.6.1,
printf("%d", printf("%o", i));
函数返回传输的字符数或负值 如果发生输出或编码错误。
所以,在第一种情况下,
printf()
内部10
打印printf()
,即两个字符,这是调用的返回值,外部102
打印出来。两个相邻打印语句的输出显示为printf()
。
类似地,当您在内部10 <space>
的格式说明符中放置空格后,它会打印(并返回)3,因此在3
之后,会打印static boolean isBalanced(String s) {
Deque<Character> operators = new LinkedList<>();
operators.push('#');
for (int i = 0; i < s.length(); ++i) {
if (operators.isEmpty()) return false;
char ch = s.charAt(i);
switch (ch) {
case '(': operators.push('#'); break;
case ')': operators.pop(); break;
case '+':
switch (operators.peek()) {
case '#': operators.pop(); operators.push(ch); break;
case '+': break;
default: return false;
}
break;
case '|':
switch (operators.peek()) {
case '#': operators.pop(); operators.push(ch); break;
case '|': break;
default: return false;
}
break;
}
}
return operators.size() == 1;
}
。< / p>
答案 1 :(得分:5)
Printf打印到标准输出,并返回int,打印字符数。 所以你得到:
10 3
是:
10是评估的内部printf,它打印八进制8。
和3,评估的外部printf打印内部printf = 3打印字符的“返回”值。
答案 2 :(得分:0)
822
int i = 8;
printf("%d", printf("%o", i));
返回打印的字符数,之前打印printf
为2。评估顺序意味着您将获得10
作为输出。或者更确切地说是102
然后是10
,而中间没有换行符或空格。
在您的第二个示例中,您获得2
(注意空格),然后10
(3
是3个字符,10
)作为{{1 }}