Was ist die „Bedingung“ im C-Interviewtest?
-
09-06-2019 - |
Frage
Wäre es möglich auszudrucken? Hello
zweimal mit Single condition
?
if "condition"
printf ("Hello");
else
printf("World");
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");
}
}
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) { }