可能重複:
What’s the 「condition」 in C interview question?幫助的if-else在C程序
與兩個printf語句得到執行這樣的條件下更換條件。 你不能有一個循環或其他東西在主要() 我發現這個代碼在線,我試圖想想它背後的邏輯,但我不能。 請幫我 感謝
可能重複:
What’s the 「condition」 in C interview question?幫助的if-else在C程序
與兩個printf語句得到執行這樣的條件下更換條件。 你不能有一個循環或其他東西在主要() 我發現這個代碼在線,我試圖想想它背後的邏輯,但我不能。 請幫我 感謝
這是一個有點像作弊,但...
void main()
{
if (printf("Hello ") == 0)
printf("Hello ");
else
printf("World");
}
首先非常感謝。 以及它不完全作弊,如果你給你最好的,但仍然無法破解它..謝謝你的幫助。讚賞它 – Ritik 2010-08-12 21:42:16
它的作弊 - 它不運行'printf(「你好」)'它的意圖運行,和替代'printf'甚至忘記包含空間,這意味着用戶可見的錯誤。 – Steve314 2010-08-13 01:04:08
@ Steve314:謝謝你指出,沒有注意到空間,我糾正了它。我同意,這是作弊,但問題本身就是愚蠢的(Ritik沒有冒犯意味):如果你想執行兩條語句,你不要使用'if/else'構造。最後,它完成了這項工作,這是重要的:D – nico 2010-08-13 06:11:18
CONDITION = printf("Hello") == 0;
對我來說沒有意義!?你改變代碼結構,這是什麼意圖? – 2010-08-12 21:33:48
@rubberboots他建議用這個表達式替換條件 – zoran404 2014-10-06 00:13:20
if(fork() == 0)
...
這裏有一個競爭條件,因爲你不知道哪個printf將被首先執行,但規則只是說「兩個printf語句都被執行」,對訂單沒有任何限制,所以對我來說很好。 – 2010-08-12 21:35:31
+1,很好!值得注意的是,這隻適用於Unix,但我敢打賭,這是誰想出的問題是尋找... – 2010-08-12 21:39:31
你可以通過使條件'!fork()||解決訂購問題。 !等待(NULL)' – caf 2010-08-12 22:32:21
你問不完全是,但以下至少會打印相同的結果就好像兩個printf被執行時一樣:
if(printf("Hello ") & 0)
printf("Hello ");
else
printf("World");
#include <stdio.h>
main()
{
if (printf("Hello "),0)
printf("Hello ");
else
printf("World");
return 0;
}
雖然我真的很喜歡rubber boots
的答案背後的想法,我認爲可能有一個更微不足道的答案。該說明明確指出,您可能沒有在 main()內部的代碼,但在之外有額外的行怎麼辦?
#define else
void main()
{
if(1)
printf("Hello ");
else
printf("World");
}
更新這裏是一個由在評論Zan Lynx
建議的替代方案。它只添加了CONDITION附近括號之間的代碼:
void main()
{
if(1
#define else
)
printf("Hello ");
else
printf("World");
}
+1爲邪惡。我喜歡。 – 2010-08-12 21:46:06
+1非常好的主意。我懷疑這不會是答案的意圖,但這更像是一個類似於C的解答(它太冗長了);-) – 2010-08-12 21:51:58
你甚至可以在尊重你只修改CONDITION的情況下做到這一點。設置CONDITION等於換行符,#define else,換行符,1 – 2010-08-12 21:56:53
這是另一種方法。它不如fork
那樣好,因爲它往往只能工作一半時間(因此不能完全解決問題),但更好的是信息永遠不會顛倒過來。
#include <stdio.h>
int main() {
if (ftell(stdout) % 2 || (printf(" "), main()))
printf("Hello ");
else
printf("World\n");
}
它首先查詢stdout
以查看已打印多少以及字符數是否爲奇數。如果是這樣,它會打印一個字符來反轉奇偶校驗和遞歸。遞歸調用看到偶數個字符並打印「hello」並返回0. 0將最上面的調用發送到else,打印「world」。
終端中的字符數必須是奇數才能起作用。
我喜歡再次調用main()的想法。我想你甚至可以通過if(*「x」++ =='x'?main(),0:1)'確定性地打印「Hello World」。這可能需要在最近的編譯器上進行編譯器切換,以允許修改字符串文字。 – x4u 2010-08-13 02:39:34
@x:謝謝,我正在絞盡腦汁。我相信C標準庫中有合法的全局變量可以使用,但我想不出任何...太生鏽。如果他只是宣佈argc和argv,那會更容易。 – Potatoswatter 2010-08-13 02:46:05
跨越式直懸崖所指出的Potatoswatter,我提供以下內容:
#include <stdio.h>
#include <errno.h>
int main()
{
if ((errno == 42) || (errno=42, main()))
printf("hello, ");
else
printf("world.");
return 0;
}
C:\...>gcc -Wall q3472196.c C:\...>a hello, world. C:\...>
我確實有主聲明,並給它一個返回值關閉了一些警告。在stdio.h中甚至可能有一些合適的邪惡定義,所以我們不必聲明errno
。
有一個原因,如果/ **其他** – 2010-08-12 21:29:37
這是這個作業嗎?如果是這樣,請標記爲這樣。 – 2010-08-12 21:30:14
你確定你的實現已經記錄了'void main()'是有效的嗎?否則,這不是一個C程序。因爲它在任何地方都是有效的,所以首選'int main()'。 – 2010-08-12 21:34:48