Question

Serait-il possible d'imprimer Hello deux fois en utilisant un seul condition?

if  "condition"
  printf ("Hello");
else
  printf("World");
Était-ce utile?

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

Référence :- Lien1 , Lien2

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) {   }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top