Quelle est la « condition » dans le test d'entretien C ?
-
09-06-2019 - |
Question
Serait-il possible d'imprimer Hello
deux fois en utilisant un seul condition
?
if "condition"
printf ("Hello");
else
printf("World");
La solution
if ( printf("Hello") == 0 )
printf ("Hello");
else
printf ("World");
:-)
Autres conseils
"condition" === (printf("Hello"), 0)
Vraiment nul :
int main() {
if (printf("Hello"), 0)
printf ("Hello");
else
printf("World");
}
Je préfère utiliser l'opérateur virgule car vous n'avez pas besoin de rechercher la valeur de retour de printf
afin de savoir ce que fait le conditionnel.Cela augmente la lisibilité et la maintenabilité.:-)
Cela me ressemble à un casse-tête d’entretien.J'espère que c'est proche de ce que vous voulez.
#include <stdio.h>
int main()
{
static int i = 0 ;
if( i++==0 ? main(): 1)
printf("Hello,");
else
printf("World\n");
return 0 ;
}
impressions Hello, World
Bouclez vos ceintures de sécurité :
#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;
}
Impressions :
if executed
else executed
C'est ce que tu veux dire?J'en doute, mais au moins c'est possible.En utilisant fork
vous pouvez le faire également, mais les branches fonctionneront selon des processus différents.
Si c'est sous Unix :
if (fork())
printf ("Hello");
else
printf("World");
Bien sûr, cela ne garantit pas l'ordre des tirages
#define CONDITION (0) if (0) {} else
ou quelque chose comme ça.
Si vous voyez une telle question lors d’un entretien, fuyez le plus vite possible !L’équipe qui pose de telles questions est forcément en mauvaise santé.
Edit - j'ai oublié de clarifier - cela repose sur la correspondance de "else" avec le "if" ouvert le plus proche, et sur le fait qu'il est écrit comme "si CONDITION" plutôt que si (CONDITION) - les parenthèses rendraient le puzzle insoluble.
if ( printf("Hello")==0)
voir [http://www.coders2020.com/what-does-printf-return]
(matt a corrigé mon =, merci, C est loin)
Le if
L'instruction exécute l'une ou l'autre des instructions contrôlées (les deux printf
dans votre exemple).Peu importe ce que vous utilisez condition
, cet extrait affichera soit "Bonjour", soit "Monde", mais jamais les deux.
Modifier:D'accord, c'est donc une question piège et vous pouvez mettre ce que vous voulez dans la condition (y compris un appel à une toute autre fonction qui fait tout ce que vous voulez).Mais ce n'est guère intéressant.Je ne peux pas croire que j'ai été downmoded pour avoir donné une réponse correcte.
Commentez le "sinon" ;)
if(foo)
{
bar();
}
//else
{
baz();
}
Sans connaître la valeur de retour de printf
du haut de votre tête :
if (printf("Hello") && 0)
printf("Hello");
else
printf("World");
La réponse de base est que dans le cours normal des événements, vous ne souhaitez pas exécuter à la fois les instructions du bloc « if » et du bloc « else » en un seul passage dans le code (pourquoi s'embêter avec la condition si vous le faites) et vous ne pouvez pas non plus vous exécutez les deux ensembles d’instructions sans sauter par des obstacles grotesques.
Quelques cerceaux grotesques – code maléfique !
if (condition == true)
{
...stuff...
goto Else;
}
else
{
Else:
...more stuff...
}
Bien sûr, il s’agit d’un simple abus de (n’importe quel) langage car cela équivaut à :
if (condition == true)
{
...stuff...
}
...more stuff...
Cependant, cela pourrait permettre d’atteindre ce que demande la question.Si vous devez exécuter les deux blocs, que la condition soit vraie ou fausse, les choses deviennent un peu plus délicates.
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");
Pas d'amour pour exit
?
if(printf("HelloWorld"), exit(0), "ByeBye")
printf ("Hello");
else
printf ("World");
Donc...vous souhaitez exécuter le code à l'intérieur du bloc if...et le code à l'intérieur du bloc else...de la même instruction if/else ?Alors...vous devriez vous débarrasser du else et coller ce code dans le if.
if something
do_this
do_that
end
L'instruction else est conçue pour s'exécuter uniquement si l'instruction if n'est pas exécutée et vice versa, c'est là tout l'intérêt.C'est une question étrange...
Cela pourrait fonctionner :
if (printf("Hello") - strlen("Hello"))
printf("Hello")
else
printf("World")
Cet extrait met l'accent sur la valeur de retour de printf
:Le nombre de caractères imprimés.
Mettez simplement le code avant ou après le bloc if..else.
Alternativement, si vous avez un bloc "if, else if, else" dans lequel vous souhaitez exécuter du code dans certaines branches (mais pas toutes), placez-le simplement dans une fonction distincte et appelez cette fonction dans chaque bloc.
Solution 1 :
int main(int argc, char* argv[])
{
if( argc == 2 || main( 2, NULL ) )
{
printf("Hello ");
}
else
{
printf("World\n");
}
return 0;
}
Solution 2 (uniquement pour Unix et 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;
}
Parce que Printf renvoie le nombre de caractères qu'il a imprimés avec succès.
if(printf("Hello") == 1)
printf("Hello")
else
printf("World")
if (printf("Hello") < 1)
printf("Hello");
else
printf("World");
Greg a écrit :
Peu importe ce que vous utilisez pour la condition, cet extrait affichera soit « Bonjour », soit « Monde », mais jamais les deux.
Eh bien, ce n'est pas vrai, mais pourquoi tu le ferais vouloir pour imprimer les deux, je ne trouve pas de cas d'utilisation.Cela va à l’encontre du but d’avoir une instruction if.La « vraie » solution probable est de ne pas utiliser de if du tout.Questions d'entretien idiotes...:)
Les gars très intéressants, merci pour les réponses.Je n'aurais jamais pensé à mettre l'instruction print dans la condition if.
Voici l'équivalent Java :
if ( System.out.printf("Hello").equals("") )
System.out.printf("Hello");
else
System.out.printf("World");
N'utilisez pas de bloc if else alors.
MODIFIER pour commenter.
Cela peut alors signifier que le code se trouve dans les deux blocs, ou avant/après le bloc s'il doit être exécuté dans les deux cas.
utilisez un goto, l'un des mots-clés les plus sous-utilisés de notre époque
Tricher avec une instruction else vide :
if (condition)
// do if stuff
else;
// do else stuff
Si vous n’aimez pas le fait, sinon ;est en fait une instruction else vide, essayez ceci :
for (int ii=0; ii<2; ii++)
{
if (condition && !ii)
// do if stuff
else
{
// do else stuff
break;
}
}
Deux solutions possibles sans utiliser les instructions printf : -
D'abord :-
#include <stdio.h>
int
main(void)
{
if (!stdin || (stdin = 0, main()))
printf("hello");
else
printf("world");
return 0;
}
Deuxième
#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");
Pas besoin de se soucier de la valeur de retour de printf.
Abus de prétraitement - avec nettoyage au moins.
#define else
if(1)
{
printf("hello");
}
else
{
printf("world");
}
#undef else
La condition à cette question est :
if(printf("hello")? 0 : 1) { }