Domanda

Sarebbe possibile stampare Hello due volte utilizzando singolo condition?

if  "condition"
  printf ("Hello");
else
  printf("World");
È stato utile?

Soluzione

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

:-)

Altri suggerimenti

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

Davvero noioso:

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

Preferisco l'uso dell'operatore virgola perché non è necessario cercare il valore restituito di printf per sapere cosa fa il condizionale.Ciò aumenta la leggibilità e la manutenibilità.:-)

Mi sembra un enigma da intervista.Spero che questo sia vicino a quello che vuoi.


#include <stdio.h>

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

 return 0 ;
}

stampe Hello, World

Allacciate le cinture di sicurezza:

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

Stampe:

if executed
else executed

È ciò che intendi?Ne dubito, ma almeno è possibile.Utilizzando fork puoi farlo anche tu, ma i rami verranno eseguiti in processi diversi.

Se è su Unix:

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

Naturalmente ciò non garantisce l'ordine delle stampe

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

o qualcosa del genere.

Se vedi una domanda del genere durante un colloquio, scappa il più velocemente possibile!La squadra che pone tali domande è destinata a essere malsana.

Modifica - ho dimenticato di chiarire - questo si basa sul fatto che "else" venga abbinato al "if" aperto più vicino e sul fatto che è scritto come "if CONDITION" anziché if (CONDITION) - la parentesi renderebbe il puzzle irrisolvibile.

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

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

(matt ha corretto il mio =, grazie, C è lontano)

IL if esegue l'una o l'altra delle istruzioni controllate (entrambi printf nel tuo esempio).Non importa per cosa lo usi condition, quello snippet stamperà "Hello" o "World", ma mai entrambi.

Modificare:Ok, quindi è una domanda trabocchetto e puoi mettere quello che vuoi nella condizione (inclusa una chiamata a un'intera altra funzione che fa tutto quello che vuoi).Ma questo non è affatto interessante.Non posso credere di essere stato declassato per aver dato una risposta corretta.

Commenta "altro" ;)

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

Senza conoscere il valore restituito di printf dalla cima della tua testa:

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

La risposta di base è che nel normale corso degli eventi non si desidera eseguire entrambe le istruzioni nel blocco "if" e nel blocco "else" in un unico passaggio attraverso il codice (perché preoccuparsi della condizione se lo si fa) né si può esegui entrambe le serie di affermazioni senza fare giri grotteschi.

Alcuni cerchi grotteschi: codice malvagio!

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

Naturalmente, è un chiaro abuso di (qualsiasi) linguaggio perché equivale a:

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

Tuttavia, potrebbe ottenere ciò che la domanda chiede.Se devi eseguire entrambi i blocchi indipendentemente dal fatto che la condizione sia vera o falsa, le cose diventano un po' più complicate.

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

Nessun amore per exit?

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

COSÌ...vuoi eseguire il codice all'interno del blocco if...e il codice all'interno del blocco else...della stessa istruzione if/else?Poi...dovresti sbarazzarti dell'altro e inserire il codice in if.

if something
  do_this
  do_that
end

L'istruzione else è progettata per essere eseguita solo se l'istruzione if non viene eseguita e viceversa, questo è il punto.Questa è una domanda strana...

Questo potrebbe funzionare:

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

Questo frammento enfatizza il valore restituito di printf:Il numero di caratteri stampati.

Basta inserire il codice prima o dopo il blocco if..else.

In alternativa, se hai un blocco "if, else if, else" in cui desideri eseguire il codice in alcuni rami (ma non in tutti), inseriscilo in una funzione separata e chiama quella funzione all'interno di ciascun blocco.

Soluzione 1:

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

Soluzione 2 (solo per Unix e 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;
}

Perché Printf restituisce il numero di caratteri che ha stampato con successo.

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

Greg ha scritto:

Non importa cosa usi come condizione, quello snippet stamperà "Ciao" o "Mondo", ma mai entrambi.

Beh, questo non è vero, ma perché dovresti farlo? Volere per stamparli entrambi, non riesco a trovare un caso d'uso per.Sta vanificando lo scopo di avere un'istruzione if.La probabile soluzione "reale" è non utilizzare un se non del tutto.Domande stupide per l'intervista...:)

Ragazzi molto interessanti, grazie per le risposte.Non avrei mai pensato di inserire l'istruzione print nella condizione if.

Ecco l'equivalente Java:

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

Allora non utilizzare un blocco if else.

EDIT per commentare.

Potrebbe quindi significare che il codice si trova in entrambi i blocchi o prima/dopo il blocco se è necessario eseguirlo in entrambi i casi.

usa goto, una delle parole chiave più sottoutilizzate dei nostri giorni

Ingannare con un'istruzione else vuota:

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

Se non ti piace il fatto che altrimenti;è in realtà un'istruzione else vuota, prova questo:

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

Due possibili soluzioni senza utilizzare le istruzioni printf: -

Primo :-

#include <stdio.h>

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

Secondo

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

Riferimento :- Collegamento1 , Collegamento2

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

Non c'è bisogno di preoccuparsi del valore restituito da printf.

Abuso della preelaborazione, almeno con la pulizia.


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

La condizione per questa domanda è:

 if(printf("hello")? 0 : 1) {   }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top