¿Sería posible imprimir Hello
dos veces con el número condition
?¿Cuál es la "condición" en la prueba de entrevista C?
if "condition"
printf ("Hello");
else
printf("World");
¿Sería posible imprimir Hello
dos veces con el número condition
?¿Cuál es la "condición" en la prueba de entrevista C?
if "condition"
printf ("Hello");
else
printf("World");
if (printf("Hello") == 0)
printf ("Hello");
else
printf ("World");
:-)
Nunca pensé en eso. – fastcodejava
Para printf: en caso de éxito, se devuelve la cantidad total de caracteres escritos. – Lesswire
La declaración if
ejecuta uno u otro de los estados controlados (tanto printf
en su ejemplo). No importa lo que use para condition
, ese fragmento imprimirá "Hola" o "Mundo", pero nunca ambos.
Editar: Bueno, entonces es una pregunta capciosa y puedes poner lo que quieras en la condición (incluyendo una llamada a una función completa que hace lo que quieras). Pero eso no es muy interesante. No puedo creer que me hayan modificado para dar una respuesta correcta.
No puedo creer que ya sea, quien lo hizo en mi opinión era pequeña/cojos . Así que aquí hay un representante de vuelta :) No debería haber sanciones negativas por no ser lo suficientemente "inteligente" como para ver la solución y publicar lo que realmente pensaste que era correcto. – freespace
if (printf("Hello")==0)
ver [http://www.coders2020.com/what-does-printf-return]
(mate corrige mis =, gracias, C es muy lejos)
if(printf("Hello") == 1)
printf("Hello")
else
printf("World")
if (true) printf ("Hello"); if (false)
printf ("Hello");
else
printf("World");
"condition" === (printf("Hello"), 0)
muy escaso:
int main() {
if (printf("Hello"), 0)
printf ("Hello");
else
printf("World");
}
prefiero el uso del operador coma, ya que no tiene que buscar el valor de retorno de printf
con el fin de saber lo que hace el condicional. Esto aumenta la legibilidad y la facilidad de mantenimiento. :-)
Esto podría funcionar:
if (printf("Hello") - strlen("Hello"))
printf("Hello")
else
printf("World")
Este fragmento hace hincapié en el valor de retorno de printf
: El número de caracteres impresos.
if (printf("Hello") < 1)
printf("Hello");
else
printf("World");
#define CONDITION (0) if (0) {} else
o algo así.
Si ve una pregunta de este tipo en una entrevista, ¡huya tan rápido como pueda! El equipo que hace tales preguntas seguramente no será saludable.
Editar - Me olvidé de aclarar - esto se basa en "más" que coincida con el más cercano abierto "si", y en el hecho de que está escrito como "si CONDICIÓN" en lugar de si (CONDICIÓN) - paréntesis haría el rompecabezas insoluble.
Greg escribió:
No importa lo que se utiliza para la condición, que o bien se fragmento de impresión "Hola", o "mundo", pero nunca ambos.
Bueno, esto no es cierto, pero por las que se desee que imprima tanto, no puede encontrar un caso de uso para. Está derrotando el punto de tener una declaración if. La posible solución "real" es no usar un si en absoluto. Preguntas tontas entrevista ...:)
Muchachos muy interesantes, gracias por las respuestas. Nunca hubiera pensado poner la declaración de impresión dentro de la condición if.
Aquí es el equivalente de Java:
if (System.out.printf("Hello").equals(""))
System.out.printf("Hello");
else
System.out.printf("World");
Sin conocer el valor de retorno de printf
de la parte superior de la cabeza:
if (printf("Hello") && 0)
printf("Hello");
else
printf("World");
Si está en Unix:
if (fork())
printf ("Hello");
else
printf("World");
Ofcoures that does not guarantee the order 0f the prints
Solución 1:
int main(int argc, char* argv[])
{
if(argc == 2 || main(2, NULL))
{
printf("Hello ");
}
else
{
printf("World\n");
}
return 0;
}
Solución 2 (Sólo para Unix y Linux):
int main(int argc, char* argv[])
{
if(!fork())
{
printf("Hello ");
}
else
{
printf("World\n");
}
return 0;
}
Sin amor por exit
?
if(printf("HelloWorld"), exit(0), "ByeBye")
printf ("Hello");
else
printf ("World");
No utilice entonces un bloque if else.
EDITAR para Comentar.
Podría significar que el código debe estar en ambos bloques, o antes/después del bloque si se requiere que se ejecute en ambos casos.
¿cuál debería ser el código en condición 'si' si queremos ejecutar código en ambos bloques? – user215968
Entonces ... ¿desea ejecutar el código dentro del bloque if ... y el código dentro del bloque else ... de la misma instrucción if/else? Entonces ... deberías deshacerte de lo demás y pegar el código en el si.
if something
do_this
do_that
end
La sentencia else está diseñado para ejecutar sólo si la sentencia if no se ejecuta y viceversa, que es el punto entero. Esta es una pregunta extraña ...
Simplemente coloque el código antes o después del bloque if..else.
Alternativamente, si tiene un bloque "if, else if, else" donde quiere ejecutar código en algunas (pero no en todas) las ramas, simplemente póngalo en una función separada y llame a esa función dentro de cada bloque.
comentario a la "cosa";)
if(foo)
{
bar();
}
//else
{
baz();
}
¡Gran respuesta! Buen uso del comentario. – fastcodejava
abrocharse el cinturón de seguridad:
#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;
}
Prints:
if executed
else executed
Es esto lo que quiere decir? Lo dudo, pero al menos es posible. Usando fork
puede hacerlo también, pero las ramas se ejecutarán en diferentes procesos.
Cuidado: no se puede asignar de forma portátil el valor de retorno de la macro setjmp(). –
@jonathan - tienes razón, corrigió el código. Sin embargo, me pregunto si hoy hay algún compilador que no lo maneje correctamente. Muchos marcos de "excepción" C basados en setjmp usan su valor de retorno guardado en un indicador –
En la práctica, probablemente funcione; Ciertamente no conozco una plataforma en la que no funcione, pero tampoco he investigado, porque la depuración de la falla sería dolorosa (en el mejor de los casos). Asignar el valor de retorno de 'setjmp()' es un comportamiento indefinido; cualquier cosa podría suceder (incluso 'funciona como se espera o se desea'). –
Esto me suena como un acertijo de entrevista. Espero que esto esté cerca de lo que quieres.
#include <stdio.h>
int main()
{
static int i = 0 ;
if(i++==0 ? main(): 1)
printf("Hello,");
else
printf("World\n");
return 0 ;
}
impresiones Hello, World
Gracias por responder Neeraj! – user215968
Creo que esta debería ser la respuesta aceptada. No utiliza horquillas, por lo que la orden está garantizada y tampoco imprime "Hola" en la condición. La ejecución realmente entra en las dos ramas de decisiones ... De lo contrario, podría imprimir todo en la condición y luego finalizar el programa, ¡creo que no es una solución muy inteligente! –
utilizar un Goto, una de las únicas palabras clave más infrautilizados de nuestros días
Y, posiblemente, uno de los más peligrosos, como han mencionado Dijkstra y otros. – Matthew
goto no es tan peligroso como el operador de desreferencia de matriz. –
La respuesta básica es que en el curso normal de los acontecimientos que no desea ejecutar tanto las declaraciones en el bloque 'if' y el bloque 'else' en un solo paso a través del código (por qué molestarse con la condición si lo hace) ni puede ejecutar ambos conjuntos de declaraciones sin saltar a través de aros grotescos.
Algunos aros grotescos - código malvado!
if (condition == true)
{
...stuff...
goto Else;
}
else
{
Else:
...more stuff...
}
Por supuesto, se trata de un abuso de llanura de (cualquier) el lenguaje, ya que es equivalente a:
if (condition == true)
{
...stuff...
}
...more stuff...
Sin embargo, se podría lograr lo que pide la pregunta. Si tiene que ejecutar ambos bloques si la condición es verdadera o falsa, entonces las cosas se vuelven un poco más complicadas.
done_then = false;
if (condition == true)
{
Then:
...stuff...
done_then = true;
goto Else;
}
else
{
Else:
...more stuff...
if (!done_then) goto Then;
}
+1 Haha, solo quería publicar eso también. –
Una versión "aún más malvada" del código invierte las etiquetas (por lo que la cláusula 'then' tiene una etiqueta 'Else' y viceversa). Y tal vez el "último" en el mal-insistencia insiste en que los bloques de código se ejecutan en el mismo orden, independientemente del resultado de la condición (que se puede hacer, por supuesto). Pero los requisitos son cada vez más exagerados y ridículos, ¡si es que aún no lo eran! –
Por lo que yo creo que solicitaron una condición, no una "Goto" de la cuenta, se rompió esa regla en mi sentido –
int main()
{
runIfElse(true);
runIfElse(false);
return 0;
}
void runIfElse(bool p)
{
if(p)
{
// do if
}
else
{
// do else
}
}
No está claro lo que significa la pregunta por 'correr', ¿verdad? +1 por distorsionar la pregunta de una manera diferente. –
Cheeting con una sentencia else vacío:
if (condition)
// do if stuff
else;
// do else stuff
Si no les gusta el hecho de que los demás; es en realidad una sentencia else vacío intente esto:
for (int ii=0; ii<2; ii++)
{
if (condition && !ii)
// do if stuff
else
{
// do else stuff
break;
}
}
dos soluciones posibles sin usar printf: -
Primero: -
#include <stdio.h>
int
main(void)
{
if (!stdin || (stdin = 0, main()))
printf("hello");
else
printf("world");
return 0;
}
Segunda
#include<stdio.h>
void main()
{
if (1
#define else if (1)
)
{
printf("hello");
}
else
{
printf("world");
}
}
La condición a esta pregunta es:
if(printf("hello")? 0 : 1) { }
si (printf ("hola") 0: 1) {} demás printf ("mundo"); – mafia
if (printf("hello") & 0)
{
printf("hello");
}
else
{
printf("world");
No hay necesidad de preocuparse por el valor de retorno de printf.
#include<stdio.h>
int main()
{
if(! printf("Hello"))
printf ("Hello");
else
printf ("World");
return 0;
}
Porque Printf devuelve el número de caracteres que se ha impreso correctamente.
Abuso de preprocesamiento, con limpieza al menos.
#define else
if(1)
{
printf("hello");
}
else
{
printf("world");
}
#undef else
Me refiero a lo que debería ser código en condición 'si' si queremos ejecutar el código en ambos bloques? – user215968
Muestra el código para que podamos echar un vistazo. –
@Michael Esta pregunta fue solicitada para una entrevista, le dije lo mismo ... pero el tipo del otro lado dijo que puede hacer eso en C. – user215968