Frage

Wäre es möglich auszudrucken? Hello zweimal mit Single condition?

if  "condition"
  printf ("Hello");
else
  printf("World");
War es hilfreich?

Lösung

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

:-)

Andere Tipps

"condition" === (printf("Hello"), 0)

Wirklich lahm:

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

Ich bevorzuge die Verwendung des Kommaoperators, da Sie den Rückgabewert von nicht nachschlagen müssen printf um zu wissen, was die Bedingung bewirkt.Dies erhöht die Lesbarkeit und Wartbarkeit.:-)

Das klingt für mich wie ein Interview-Rätsel.Ich hoffe, das kommt Ihren Wünschen nahe.


#include <stdio.h>

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

 return 0 ;
}

druckt Hello, World

Schnallen Sie sich an:

#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;
}

Drucke:

if executed
else executed

Ist es das was du meinst?Ich bezweifle es, aber zumindest ist es möglich.Benutzen fork Sie können es auch tun, aber die Zweige werden in unterschiedlichen Prozessen ausgeführt.

Wenn es unter Unix ist:

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

Natürlich ist dies keine Garantie für die Reihenfolge der Ausdrucke

#define CONDITION (0) if (0) {} else

oder so.

Wenn Sie in einem Vorstellungsgespräch auf eine solche Frage stoßen, rennen Sie so schnell wie möglich weg!Das Team, das solche Fragen stellt, ist zwangsläufig ungesund.

Bearbeiten – ich habe vergessen zu klären – dies hängt davon ab, dass „else“ mit dem nächstgelegenen offenen „if“ übereinstimmt und dass es als „if CONDITION“ und nicht als if (CONDITION) geschrieben wird – Klammern würden das Rätsel unlösbar machen.

if ( printf("Hello")==0)

sehen [http://www.coders2020.com/what-does-printf-return]

(Matt hat mein = korrigiert, danke, C ist weit weg)

Der if Die Anweisung führt die eine oder andere der gesteuerten Anweisungen aus (beide). printf in deinem Beispiel).Egal, wofür Sie es verwenden condition, dieses Snippet gibt entweder „Hello“ oder „World“ aus, aber niemals beides.

Bearbeiten:Okay, es ist also eine Fangfrage und Sie können in die Bedingung alles einfügen, was Sie möchten (einschließlich eines Aufrufs einer ganz anderen Funktion, die alles tut, was Sie wollen).Aber das ist kaum interessant.Ich kann nicht glauben, dass ich herabgestuft wurde, weil ich eine richtige Antwort gegeben habe.

Kommentiere das „sonst“ ;)

if(foo)
{
    bar();
}
//else
{
    baz();
}

Ohne den Rückgabewert von zu kennen printf aus dem Kopf:

if (printf("Hello") && 0)
    printf("Hello");
else
    printf("World");

Die grundlegende Antwort lautet: Im Normalfall möchten Sie die Anweisungen im „if“-Block und im „else“-Block nicht in einem einzigen Durchgang durch den Code ausführen (warum sollten Sie sich dann mit der Bedingung beschäftigen, wenn Sie dies tun) und können es auch nicht? Sie führen beide Sätze von Anweisungen aus, ohne durch groteske Hürden zu springen.

Ein paar groteske Reifen – böser Code!

    if (condition == true)
    {
         ...stuff...
         goto Else;
    }
    else
    {
Else:
        ...more stuff...
    }

Natürlich ist es ein schlichter Missbrauch (jeder) Sprache, denn es ist gleichbedeutend mit:

    if (condition == true)
    {
         ...stuff...
    }
    ...more stuff...

Es könnte jedoch das erreichen, was in der Frage gestellt wird.Wenn Sie beide Blöcke unabhängig davon ausführen müssen, ob die Bedingung wahr oder falsch ist, wird es etwas schwieriger.

    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");

Keine Liebe für exit?

if(printf("HelloWorld"), exit(0), "ByeBye") 
    printf ("Hello");
else
    printf ("World");

Also...Sie möchten den Code innerhalb des if-Blocks ausführen ...und der Code im else-Block ...der gleichen if/else-Anweisung?Dann...Sie sollten das else loswerden und den Code in das if einfügen.

if something
  do_this
  do_that
end

Die else-Anweisung ist so konzipiert, dass sie nur dann ausgeführt wird, wenn die if-Anweisung nicht ausgeführt wird und umgekehrt, das ist der springende Punkt.Das ist eine seltsame Frage...

Das könnte funktionieren:

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

Dieses Snippet betont den Rückgabewert von printf:Die Anzahl der gedruckten Zeichen.

Fügen Sie den Code einfach vor oder nach dem if..else-Block ein.

Wenn Sie alternativ einen „if, else if, else“-Block haben, in dem Sie Code in einigen (aber nicht allen) Zweigen ausführen möchten, fügen Sie ihn einfach in eine separate Funktion ein und rufen Sie diese Funktion in jedem Block auf.

Lösung 1:

int main(int argc, char* argv[])
{   
    if( argc == 2 || main( 2, NULL ) )
    {
        printf("Hello ");   
    }
    else
    {
        printf("World\n");
    }
    return 0;
}

Lösung 2 (nur für Unix und 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;
}

Weil Printf die Anzahl der erfolgreich gedruckten Zeichen zurückgibt.

if(printf("Hello") == 1)
    printf("Hello")
else
    printf("World")
if (printf("Hello") < 1)
    printf("Hello");
else
    printf("World");

Greg schrieb:

Unabhängig davon, was Sie als Bedingung verwenden, gibt dieses Snippet entweder „Hallo“ oder „Welt“ aus, aber niemals beides.

Nun, das ist nicht wahr, aber warum sollten Sie das tun? wollen Um beides auszudrucken, kann ich keinen Anwendungsfall dafür finden.Es macht den Sinn einer if-Anweisung zunichte.Die wahrscheinliche „echte“ Lösung besteht darin, überhaupt kein Wenn zu verwenden.Dumme Fragen im Vorstellungsgespräch...:) :)

Sehr interessante Leute, danke für die Antworten.Ich hätte nie darüber nachgedacht, die print-Anweisung in die if-Bedingung einzufügen.

Hier ist das Java-Äquivalent:

    if ( System.out.printf("Hello").equals("") )
        System.out.printf("Hello");
    else
        System.out.printf("World");

Verwenden Sie dann keinen if else-Block.

Zum Kommentieren BEARBEITEN.

Dies kann dann bedeuten, dass sich der Code in beiden Blöcken oder vor/nach dem Block befindet, wenn er in beiden Fällen ausgeführt werden muss.

Verwenden Sie „goto“, eines der am wenigsten genutzten Schlüsselwörter unserer Zeit

Cheeting mit einer leeren else-Anweisung:

if (condition)
    // do if stuff
else;
    // do else stuff

Wenn Ihnen die Tatsache nicht gefällt, dass es etwas anderes gibt;ist eigentlich eine leere else-Anweisung. Versuchen Sie Folgendes:

for (int ii=0; ii<2; ii++)
{
    if (condition && !ii)
        // do if stuff
    else
    {
        // do else stuff
        break;
    }
}

Zwei mögliche Lösungen ohne Verwendung von printf-Anweisungen: –

Erste :-

#include <stdio.h>

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

Zweite

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

Referenz :- Link1 , Link2

if (printf("hello") & 0)
{
printf("hello");
}
else
{
printf("world");

Sie müssen sich nicht um den Rückgabewert von printf kümmern.

Missbrauch der Vorverarbeitung – zumindest mit Bereinigung.


#define else 
if(1)
{
   printf("hello");
}
else
{
   printf("world");
}
#undef else

Die Bedingung für diese Frage ist:

 if(printf("hello")? 0 : 1) {   }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top