Pergunta

Seria possível imprimir Hello duas vezes usando único condition?

if  "condition"
  printf ("Hello");
else
  printf("World");
Foi útil?

Solução

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

:-)

Outras dicas

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

Realmente chato:

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

Prefiro o uso do operador vírgula porque você não precisa procurar o valor de retorno de printf para saber o que a condicional faz.Isso aumenta a legibilidade e a capacidade de manutenção.:-)

Isso me parece um quebra-cabeça de entrevista.Espero que isso esteja próximo do que você deseja.


#include <stdio.h>

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

 return 0 ;
}

estampas Hello, World

Apertem os cintos de segurança:

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

Impressões:

if executed
else executed

É isto que você quer dizer?Duvido, mas pelo menos é possível.Usando fork você também pode fazer isso, mas as ramificações serão executadas em processos diferentes.

Se estiver no Unix:

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

É claro que isso não garante a ordem das impressões

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

ou algo assim.

Se você vir essa pergunta em uma entrevista, fuja o mais rápido que puder!A equipe que faz essas perguntas certamente não será saudável.

Editar - esqueci de esclarecer - isso depende de "else" ser correspondido com o "if" aberto mais próximo e do fato de estar escrito como "if CONDITION" em vez de if (CONDITION) - parênteses tornariam o quebra-cabeça insolúvel.

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

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

(matt corrigiu meu =, obrigado, C está longe)

O if instrução executa uma ou outra das instruções controladas (ambas printf no seu exemplo).Não importa para que você use condition, esse trecho imprimirá "Hello" ou "World", mas nunca ambos.

Editar:Ok, então é uma pergunta capciosa e você pode colocar o que quiser na condição (incluindo uma chamada para uma outra função inteira que faz o que você quiser).Mas isso não é interessante.Não acredito que fui prejudicado por dar uma resposta correta.

Comente o "else" ;)

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

Sem saber o valor de retorno de printf em cima da sua cabeça:

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

A resposta básica é que, no curso normal dos eventos, você não deseja executar ambas as instruções no bloco 'if' e no bloco 'else' em uma única passagem pelo código (por que se preocupar com a condição se o faz) nem pode você executa os dois conjuntos de instruções sem passar por obstáculos grotescos.

Alguns aros grotescos - código maligno!

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

Claro, é um claro abuso de (qualquer) linguagem porque é equivalente a:

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

No entanto, pode conseguir o que a pergunta está perguntando.Se você tiver que executar os dois blocos, seja a condição verdadeira ou falsa, as coisas ficarão um pouco mais complicadas.

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

Não há amor por exit?

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

Então...você deseja executar o código dentro do bloco if ...e o código dentro do bloco else...da mesma instrução if/else?Então...você deve se livrar do else e colar esse código no if.

if something
  do_this
  do_that
end

A instrução else foi projetada para ser executada apenas se a instrução if não for executada e vice-versa, esse é o ponto principal.Esta é uma pergunta estranha...

Isso poderia funcionar:

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

Este trecho enfatiza o valor de retorno de printf:O número de caracteres impressos.

Basta colocar o código antes ou depois do bloco if..else.

Alternativamente, se você tiver um bloco "if, else if, else" onde deseja executar código em algumas ramificações (mas não todas), basta colocá-lo em uma função separada e chamar essa função dentro de cada bloco.

Solução 1:

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

Solução 2 (somente para 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;
}

Porque Printf retorna o número de caracteres que foram impressos com sucesso.

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

Greg escreveu:

Não importa qual condição você use, esse trecho imprimirá "Hello" ou "World", mas nunca ambos.

Bem, isso não é verdade, mas por que você faria isso? querer para imprimir ambos, não consigo encontrar um caso de uso para.Está anulando o objetivo de ter uma instrução if.A provável solução "real" é não usar nenhum caso.Perguntas bobas da entrevista...:)

Pessoal muito interessante, obrigado pelas respostas.Eu nunca teria pensado em colocar a instrução print dentro da condição if.

Aqui está o equivalente em Java:

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

Não use um bloco if else then.

EDITAR para comentar.

Isso pode significar que o código está em ambos os blocos ou antes/depois do bloco, se for necessário executar em ambos os casos.

use goto, uma das palavras-chave mais subutilizadas de nossos dias

Cheeting com uma instrução else vazia:

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

Se você não gosta do outro fato;é na verdade uma instrução else vazia, tente isto:

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

Duas soluções possíveis sem usar instruções printf: -

Primeiro :-

#include <stdio.h>

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

Segundo

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

Referência: - Link1 , Link2

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

Não há necessidade de se preocupar com o valor de retorno de printf.

Abuso de pré-processamento - pelo menos com limpeza.


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

A condição para esta pergunta é:

 if(printf("hello")? 0 : 1) {   }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top