[英]how does " for (int j = 0; j < n || !putchar('\n'); j++) " work
找到了這段代碼,負責打印出一個二維數組
for (int i = 0; i < n; i++)
for (int j = 0; j < n || !putchar('\n'); j++)
printf_s("%4d", A[i][j]);
導致在每行末尾打印轉義序列的布爾表達式如何工作?
因為||
,只有當j < n
為假時才會調用putchar
函數。 現在, j < n
在每一行的末尾都是假的。 這就是為什么你在每一行的末尾得到\\n
的原因。
這里有兩件事在起作用:
當j < n
為真時, ||
的右側由於短路語義,將不會被評估。 當j < n
為假時, !putchar('\\n')
將被評估,它將打印一個換行符並返回一個“真”值( '\\n'
或EOF
錯誤),這是由於!
變為假,所以整個條件變為假,循環結束。
這是一個混淆的變體
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf_s("%4d", A[i][j]);
}
putchar('\n');
}
我真的建議您不要使用(或更糟的是,編寫)代碼作為問題中顯示的代碼。 混淆不是一件值得驕傲的事情(除非你進入IOCCC )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.