Was ist die “Bedingung” im C-Interview-Test?

Lesezeit: 3 Minuten

Benutzer-Avatar
Ryan

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

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

  • http://www.geekinterview.com/question_details/65997

    – ceejayoz

    28. August 2008 um 19:41 Uhr

  • Ich meine, was sollte Code in der ‘if’-Bedingung sein, wenn wir Code in beiden Blöcken ausführen wollen?

    – Benutzer215968

    21. November 2009 um 6:13 Uhr

  • Das ist eine blöde Fangfrage. Die Frage war wahrscheinlich eher so: stackoverflow.com/questions/33199/… und die Antworten sind da.

    – Greg Hewgill

    21. November 2009 um 6:22 Uhr

  • Die Antwort ist: Du willst nicht irgendwo arbeiten, wo solche dummen Fragen gestellt werden.

    – Laurence Gonsalves

    21. November 2009 um 6:33 Uhr

  • Duplikat? Ich denke nicht! Die meisten Antworten im “Duplikat” sind nicht so interessant wie die Antworten hier. Zum Teil, weil die Frage ist komplett anders. Hier wollen wir beide Zweige ausführen, in der anderen Frage war die Anforderung, eine Bedingung zu schaffen, die eine bestimmte Ausgabe bewirkt. Sehr unterschiedliche Fragen mit sehr unterschiedlichen Antworten. Der eine testet Ihr Wissen über goto-ähnliche Konstrukte, der andere testet Ihr Bewusstsein für Nebenwirkungen von Bedingungen.

    – mlibby

    21. November 2009 um 12:47 Uhr

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

🙂

  • Für printf: Bei Erfolg wird die Gesamtzahl der geschriebenen Zeichen zurückgegeben.

    – Weniger Draht

    5. Januar 2015 um 12:52 Uhr

Benutzer-Avatar
Frank Krüger

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

Wirklich lahm:

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

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

Benutzer-Avatar
sud03r

Das klingt für mich wie ein Interview-Rätsel. Ich hoffe, das kommt dem nahe, was Sie wollen.


#include <stdio.h>

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

 return 0 ;
}

Drucke Hello, World

  • Ich denke, dies sollte die akzeptierte Antwort sein. Es werden keine Gabeln verwendet, sodass die Bestellung garantiert ist, und es wird auch kein „Hallo“ in den Zustand gedruckt. Die Ausführung geht eigentlich in die beiden Entscheidungszweige… Sonst könnte man alles in die Bedingung drucken und dann das Programm beenden, das finde ich keine sehr schlaue Lösung!

    – Javi Ortiz

    3. September 2014 um 11:34 Uhr

Benutzer-Avatar
Eli Bendersky

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. Verwenden fork Sie können dies auch tun, aber die Zweige werden in unterschiedlichen Prozessen ausgeführt.

Wenn es auf Unix ist:

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

Das garantiert natürlich nicht die Reihenfolge der Drucke

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

oder so etwas.

Wenn Sie eine solche Frage in einem Interview sehen, 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 beruht darauf, dass “else” mit dem nächsten offenen “if” abgeglichen wird 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 korrigiert mein =, danke, C ist weit weg)

1375740cookie-checkWas ist die “Bedingung” im C-Interview-Test?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy