31

Hellosingle を使用して 2 回印刷することは可能でしょうconditionか?

if  "condition"
  printf ("Hello");
else
  printf("World");
4

30 に答える 30

84
if ( printf("Hello") == 0 )
    printf ("Hello");
else
    printf ("World");

:-)

于 2008-08-28T19:41:32.740 に答える
21
"condition" === (printf("Hello"), 0)

本当に不自由:

int main() {
    if  (printf("Hello"), 0)
        printf ("Hello");
    else
        printf("World");
}

printf条件が何をするかを知るために戻り値を調べる必要がないので、コンマ演算子の使用を好みます。これにより、可読性と保守性が向上します。:-)

于 2008-08-28T19:42:40.180 に答える
17

これはインタビューのパズルのように思えます。これがあなたの望むものに近いことを願っています。


#include <stdio.h>

int main()
{
 static int i = 0 ;
 if( i++==0 ? main(): 1)
  printf("Hello,");
 else
  printf("World\n");

 return 0 ;
}

版画Hello, World

于 2009-11-21T06:26:42.090 に答える
13

シートベルトを締めます:

#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することもできますが、ブランチは異なるプロセスで実行されます。

于 2009-11-21T06:25:06.850 に答える
11

Unixの場合:

if  (fork())
    printf ("Hello");
else
    printf("World");

プリントの順序を保証しない場合

于 2008-09-17T07:03:20.963 に答える
6
#define CONDITION (0) if (0) {} else

またはそのようなもの。

面接でそのような質問を見かけたら、一刻も早く逃げましょう!そのような質問をするチームは、不健康に違いありません。

編集-明確にするのを忘れました-これは、「else」が最も近い開いている「if」と一致することに依存しており、if (CONDITION) ではなく「if CONDITION」と書かれているという事実に依存しています-括弧はパズルを解決できません.

于 2008-08-28T19:45:53.260 に答える
5

ifステートメントは、制御されたステートメントのいずれかを実行します(例では両方)printf。に何を使用してもcondition、そのスニペットは「Hello」または「World」のいずれかを出力しますが、両方を出力することはありません。

編集:さて、それはひっかけ問題であり、条件に好きなものを入れることができます(必要なことを行う他の関数全体への呼び出しを含む)。しかし、それはほとんど興味深いものではありません。正解したからってダウンモッドされたなんて信じられない。

于 2008-08-28T19:39:32.420 に答える
5
if ( printf("Hello")==0)

[ http://www.coders2020.com/what-does-printf-return]を参照

(マットは私の=を修正しました、ありがとう、Cは遠く離れています)

于 2008-08-28T19:40:56.580 に答える
3

printf頭のてっぺんからの戻り値を知らなくても:

if (printf("Hello") && 0)
    printf("Hello");
else
    printf("World");
于 2008-08-29T00:46:44.020 に答える
3

"else" にコメントしてください ;)

if(foo)
{
    bar();
}
//else
{
    baz();
}
于 2009-11-21T06:23:20.380 に答える
3

基本的な答えは、通常の一連のイベントでは、「if」ブロックと「else」ブロックの両方のステートメントをコードの 1 回のパスで実行したくないということです (実行する場合、条件を気にする必要はありません)。グロテスクなフープをジャンプすることなく、両方のステートメントのセットを実行します。

いくつかのグロテスクなフープ - 邪悪なコード!

    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;
    }
于 2009-11-21T06:48:37.923 に答える
3
int main()
{
    runIfElse(true);
    runIfElse(false);

    return 0;
}

void runIfElse(bool p)
{
    if(p)
    {
     // do if
    }
    else
    {
     // do else
    }
}
于 2009-11-21T06:48:51.530 に答える
2

への愛はありませんexitか?

if(printf("HelloWorld"), exit(0), "ByeBye") 
    printf ("Hello");
else
    printf ("World");
于 2009-09-03T15:02:32.930 に答える
2
if  (true) printf ("Hello"); if (false)
    printf ("Hello");
else
    printf("World");
于 2008-08-28T19:41:58.810 に答える
2

では... if ブロック内のコードを実行したい... および else ブロック内のコードを... 同じ if/else ステートメントで実行したいですか? 次に...elseを取り除き、ifにtahtコードを貼り付ける必要があります。

if something
  do_this
  do_that
end

else ステートメントは、if ステートメントが実行されない場合にのみ実行されるように設計されており、その逆も同様です。これは奇妙な質問です...

于 2009-11-21T06:12:08.857 に答える
1

解決策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;
}
于 2009-04-24T06:00:07.560 に答える
1

これはうまくいくかもしれません:

if (printf("Hello") - strlen("Hello"))
    printf("Hello")
else
    printf("World")

このスニペットは、次の戻り値を強調していますprintf。印刷された文字数。

于 2008-08-28T19:43:03.643 に答える
1
 #include<stdio.h>
  int main()
{
 if(! printf("Hello"))
     printf ("Hello");
else
    printf ("World");
 return 0;
}

Printf は正常に印刷された文字数を返すためです。

于 2015-05-01T18:00:24.503 に答える
1

if..else ブロックの前後にコードを配置するだけです。

あるいは、「if、else if、else」ブロックがあり、すべてではなく一部のブランチでコードを実行したい場合は、それを別の関数に入れて、各ブロック内でその関数を呼び出すだけです。

于 2009-11-21T06:13:47.700 に答える
0

printfステートメントを使用しない2つの可能な解決策:-

初め :-

#include <stdio.h>

int
main(void)
{
  if (!stdin || (stdin = 0, main()))
    printf("hello");
  else
    printf("world");
  return 0;
}

2番

#include<stdio.h>
void main()
{
if (1
#define else if (1) 
)
{ 
  printf("hello"); 
} 
else
 { 
    printf("world"); 
}
}

参照:-Link1Link2

于 2012-04-14T06:45:50.893 に答える
0

今日最も活用されていないキーワードの 1 つである goto を使用する

于 2009-11-21T06:32:52.980 に答える
0

非常に興味深い人たち、答えてくれてありがとう。if 条件の中に print ステートメントを入れることなど考えたこともありませんでした。

同等のJavaは次のとおりです。

    if ( System.out.printf("Hello").equals("") )
        System.out.printf("Hello");
    else
        System.out.printf("World");
于 2008-08-28T19:59:11.107 に答える
0
if(printf("Hello") == 1)
    printf("Hello")
else
    printf("World")
于 2008-08-28T19:41:10.200 に答える
0
if (printf("Hello") < 1)
    printf("Hello");
else
    printf("World");
于 2008-08-28T19:43:55.513 に答える
0

前処理の乱用 - 少なくともクリーンアップあり。


#define else 
if(1)
{
   printf("hello");
}
else
{
   printf("world");
}
#undef else
于 2015-05-01T18:21:07.607 に答える
0
if (printf("hello") & 0)
{
printf("hello");
}
else
{
printf("world");

printf の戻り値を気にする必要はありません。

于 2014-08-29T08:23:15.183 に答える
0

if else ブロック then を使用しないでください。

編集してコメントします。

その場合、コードが両方のブロックにあるか、両方のケースで実行する必要がある場合はブロックの前後にあることを意味する場合があります。

于 2009-11-21T06:12:00.883 に答える
0

グレッグは書きました:

条件に何を使用しても、そのスニペットは「Hello」または「World」のいずれかを出力しますが、両方を出力することはありません。

まあ、これは真実ではありませんが、なぜ両方を印刷する必要があるのか​​ 、ユースケースが見つかりません. if ステートメントを使用するという点を無効にしています。おそらく「本当の」解決策は、if をまったく使用しないことです。ばかげたインタビューの質問... :)

于 2008-08-28T19:50:00.553 に答える
0

空の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;
    }
}
于 2009-11-21T07:06:48.700 に答える
-2

この質問の条件は次のとおりです。

 if(printf("hello")? 0 : 1) {   }
于 2012-08-21T17:39:11.970 に答える