質問
印刷は可能でしょうか Hello
シングルを2回使用 condition
?
if "condition"
printf ("Hello");
else
printf("World");
解決
if ( printf("Hello") == 0 )
printf ("Hello");
else
printf ("World");
:-)
他のヒント
"condition" === (printf("Hello"), 0)
本当にダサい:
int main() {
if (printf("Hello"), 0)
printf ("Hello");
else
printf("World");
}
戻り値を調べる必要がないため、私はカンマ演算子の使用を好みます。 printf
条件式が何をするのかを知るためです。これにより、可読性と保守性が向上します。:-)
これは私には面接パズルのように聞こえます。これがご希望に近いものであることを願っています。
#include <stdio.h>
int main()
{
static int i = 0 ;
if( i++==0 ? main(): 1)
printf("Hello,");
else
printf("World\n");
return 0 ;
}
プリント Hello, World
シートベルトを締めます:
#include <stdio.h>
#include <setjmp.h>
int main()
{
jmp_buf env;
if (!setjmp(env))
{
printf("if executed\n");
longjmp(env, 1);
}
else
{
printf("else executed\n");
}
return 0;
}
プリント:
if executed
else executed
ということですか?私はそれを疑いますが、少なくともそれは可能です。使用する fork
これも実行できますが、ブランチは別のプロセスで実行されます。
Unix 上の場合:
if (fork())
printf ("Hello");
else
printf("World");
もちろん、印刷の順序を保証するものではありません
#define CONDITION (0) if (0) {} else
またはそのようなもの。
面接でそのような質問を見かけたら、すぐに逃げてください。このような質問をするチームは間違いなく不健全です。
編集 - 明確にするのを忘れました - これは、「else」が最も近い開いた「if」と一致すること、および if (CONDITION) ではなく「if CONDITION」として記述されているという事実に依存しています - 括弧を使用するとパズルが解けなくなります。
if ( printf("Hello")==0)
見る [http://www.coders2020.com/what-does-printf-return]
(マットは私の = を修正しました、ありがとう、C は遠くにあります)
の if
ステートメントは、制御されたステートメントのいずれか (両方とも) を実行します。 printf
あなたの例では)。何に使っても condition
, の場合、そのスニペットは「Hello」または「World」のいずれかを出力しますが、両方を出力することはありません。
編集:さて、これはひっかけの質問で、条件には好きなものを何でも入れることができます (やりたいことを何でも行う他の関数全体の呼び出しを含む)。しかし、それはほとんど面白くありません。正しい答えをしたためにダウンモッドを受けたことが信じられません。
「else」をコメントしてください ;)
if(foo)
{
bar();
}
//else
{
baz();
}
戻り値が分からないまま、 printf
頭の上から:
if (printf("Hello") && 0)
printf("Hello");
else
printf("World");
基本的な答えは、通常のイベントの過程では、コードの 1 回のパスで 'if' ブロックと 'else' ブロックの両方のステートメントを実行したくない (実行するのにわざわざ条件を使う必要はない) し、実行することもできないということです。グロテスクなフープを飛び越えることなく、両方のステートメント セットを実行できます。
いくつかのグロテスクなフープ - 邪悪なコード!
if (condition == true)
{
...stuff...
goto Else;
}
else
{
Else:
...more stuff...
}
もちろん、これは次の行為と同等であるため、(あらゆる) 言語の明らかな乱用です。
if (condition == true)
{
...stuff...
}
...more stuff...
ただし、質問の目的を達成できる可能性があります。条件が true か false かに関係なく両方のブロックを実行する必要がある場合、状況は少し複雑になります。
done_then = false;
if (condition == true)
{
Then:
...stuff...
done_then = true;
goto Else;
}
else
{
Else:
...more stuff...
if (!done_then) goto Then;
}
int main()
{
runIfElse(true);
runIfElse(false);
return 0;
}
void runIfElse(bool p)
{
if(p)
{
// do if
}
else
{
// do else
}
}
if (true) printf ("Hello"); if (false)
printf ("Hello");
else
printf("World");
愛がない exit
?
if(printf("HelloWorld"), exit(0), "ByeBye")
printf ("Hello");
else
printf ("World");
それで...if ブロック内のコードを実行したい場合...そしてelseブロック内のコード...同じ if/else ステートメントですか?それから...else を削除して、if にコードを挿入する必要があります。
if something
do_this
do_that
end
else ステートメントは、if ステートメントが実行されない場合にのみ実行されるように設計されており、その逆も同様です。これが重要です。奇妙な質問です...
これはうまくいくかもしれません:
if (printf("Hello") - strlen("Hello"))
printf("Hello")
else
printf("World")
このスニペットは、戻り値を強調しています。 printf
:印刷される文字数。
コードを if..else ブロックの前後に置くだけです。
あるいは、一部の (すべてではない) 分岐でコードを実行する「if、else if、else」ブロックがある場合は、それを別の関数に入れて、各ブロック内でその関数を呼び出すだけです。
解決策 1:
int main(int argc, char* argv[])
{
if( argc == 2 || main( 2, NULL ) )
{
printf("Hello ");
}
else
{
printf("World\n");
}
return 0;
}
解決策 2 (Unix および Linux のみ):
int main(int argc, char* argv[])
{
if( !fork() )
{
printf("Hello ");
}
else
{
printf("World\n");
}
return 0;
}
#include<stdio.h>
int main()
{
if(! printf("Hello"))
printf ("Hello");
else
printf ("World");
return 0;
}
Printf は正常に印刷された文字数を返すためです。
if(printf("Hello") == 1)
printf("Hello")
else
printf("World")
if (printf("Hello") < 1)
printf("Hello");
else
printf("World");
グレッグはこう書きました:
条件に何を使用しても、そのスニペットは「Hello」または「World」のいずれかを出力しますが、両方を出力することはありません。
まあ、これは真実ではありませんが、なぜそうするのでしょうか 欲しい 両方を印刷するには、使用例が見つかりません。これでは if ステートメントを使用する意味が失われます。おそらく「本当の」解決策は、if をまったく使用しないことです。面接でのバカな質問…:)
とても興味深い人たち、答えてくれてありがとう。if 条件の中に print ステートメントを入れることは考えもしませんでした。
Java に相当するものは次のとおりです。
if ( System.out.printf("Hello").equals("") )
System.out.printf("Hello");
else
System.out.printf("World");
if else ブロック then は使用しないでください。
コメントを編集します。
これは、コードが両方のブロックにあること、または両方の場合で実行する必要がある場合はブロックの前後にあることを意味する場合があります。
今日最も十分に活用されていないキーワードの 1 つである goto を使用する
空の else ステートメントを使用した不正行為:
if (condition)
// do if stuff
else;
// do else stuff
それ以外のことが気に入らない場合は、実際には空の else ステートメントです。これを試してください。
for (int ii=0; ii<2; ii++)
{
if (condition && !ii)
// do if stuff
else
{
// do else stuff
break;
}
}
if (printf("hello") & 0)
{
printf("hello");
}
else
{
printf("world");
printf の戻り値を気にする必要はありません。
前処理の乱用 - 少なくともクリーンアップが必要です。
#define else
if(1)
{
printf("hello");
}
else
{
printf("world");
}
#undef else
この質問に対する条件は次のとおりです。
if(printf("hello")? 0 : 1) { }