¿Cuál es la "condición" en C entrevista de prueba?
-
09-06-2019 - |
Pregunta
Sería posible imprimir Hello
doble de uso individual condition
?
if "condition"
printf ("Hello");
else
printf("World");
Solución
if ( printf("Hello") == 0 )
printf ("Hello");
else
printf ("World");
:-)
Otros consejos
"condition" === (printf("Hello"), 0)
Realmente cojo:
int main() {
if (printf("Hello"), 0)
printf ("Hello");
else
printf("World");
}
Yo prefiero el uso de la coma operario, debido a que usted no tiene que buscar el valor de retorno de printf
con el fin de saber lo que el condicional no.Esto aumenta la legibilidad y mantenibilidad.:-)
Esto me suena a alguna entrevista de puzzle.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 ;
}
imprime Hello, World
Hebilla de su 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;
}
Impresiones:
if executed
else executed
Es esto lo que quieres decir?Lo dudo, pero al menos es posible.El uso de fork
usted puede hacerlo también, pero las ramas se ejecutan en los diferentes procesos.
Si es que en Unix:
if (fork())
printf ("Hello");
else
printf("World");
Ofcoures que no garantiza el orden 0f las impresiones
#define CONDITION (0) if (0) {} else
o alguna de esas.
Si ves una pregunta en una entrevista, correr tan rápido como puedas!El equipo que hace tales preguntas es obligado a ser perjudicial para la salud.
Edit - me olvidé de aclarar - esto depende de la "cosa" que sea emparejado con el más cercano abierta "si", y en el hecho de que fue escrito como "si la CONDICIÓN de" en lugar de si (CONDICIÓN) - paréntesis haría el rompecabezas irresoluble.
if ( printf("Hello")==0)
ver [http://www.coders2020.com/what-does-printf-return]
(matt corregido mi =, gracias, C está lejos)
El if
instrucción se ejecuta uno o el otro de la controlada declaraciones de ambos printf
en el ejemplo).No importa lo que se utiliza para condition
, que código imprimir "Hola", o "Mundo", pero nunca ambos.
Editar:Bien, es una pregunta con trampa y puedes poner lo que quieras en la condición (incluyendo un llamado a toda otra función que hace cualquier cosa que usted desea).Pero eso no es interesante.Yo no puedo creer que me downmodded para dar una respuesta correcta.
Comentario de la "cosa" ;)
if(foo)
{
bar();
}
//else
{
baz();
}
Sin conocer el valor de retorno de printf
fuera de la parte superior de su cabeza:
if (printf("Hello") && 0)
printf("Hello");
else
printf("World");
La respuesta básica es que en el curso normal de los eventos que usted no desea ejecutar tanto las declaraciones en el 'si' bloque y el 'otro' bloque en una sola pasada a través del código (¿por qué molestarse con la condición de que si lo hacen) ni se puede ejecutar ambos conjuntos de instrucciones sin saltar a través de grotesco aros.
Algunos grotesco aros y el mal el código!
if (condition == true)
{
...stuff...
goto Else;
}
else
{
Else:
...more stuff...
}
Por supuesto, se trata de una llanura abuso de (cualquier) idioma porque es equivalente a:
if (condition == true)
{
...stuff...
}
...more stuff...
Sin embargo, se puede lograr lo que la pregunta está pidiendo.Si tiene que ejecutar los dos bloques de si la condición es verdadera o falsa, entonces las cosas se ponen un poco más complicado.
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");
No hay amor por exit
?
if(printf("HelloWorld"), exit(0), "ByeBye")
printf ("Hello");
else
printf ("World");
Así que...se desea ejecutar el código dentro del bloque if...y el código dentro del bloque else...de la misma if/else?Entonces...usted debe deshacerse de la persona y el palo taht código en el si.
if something
do_this
do_that
end
La instrucción else está diseñado para ejecutar sólo si la si la instrucción no se ejecuta y viceversa, que es el punto entero.Esta es una pregunta extraña...
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.
Sólo hay que poner el código antes o después de la if..else bloque.
Alternativamente, si usted tiene un "if, else if, else" bloque donde se desea ejecutar código en algunas (pero no todas) de las ramas, acaba de poner en una función separada y llame a esa función dentro de cada bloque.
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;
}
#include<stdio.h>
int main()
{
if(! printf("Hello"))
printf ("Hello");
else
printf ("World");
return 0;
}
Porque Printf devuelve el número de caracteres se ha impreso correctamente.
if(printf("Hello") == 1)
printf("Hello")
else
printf("World")
if (printf("Hello") < 1)
printf("Hello");
else
printf("World");
Greg escribió:
No importa lo que usted utiliza para la condición, de que el fragmento se imprima "Hola", o "Mundo", pero nunca ambos.
Bueno, esto no es cierto, pero ¿por qué iba a quiero imprimir tanto, no puedo encontrar un caso de uso para.Es derrotar al punto de tener una instrucción if.El probable "real" de la solución es que no se utilice en todo caso.Tontas las preguntas de la entrevista...:)
Muy interesante chicos, gracias por las respuestas.Yo nunca habría pensado en poner la instrucción de impresión dentro de la condición if.
Aquí está el Java equivalente:
if ( System.out.printf("Hello").equals("") )
System.out.printf("Hello");
else
System.out.printf("World");
No usar un if else bloque.
EDITAR un Comentario.
Se podría entonces decir que el código de estar en ambos bloques, o antes/después de que el bloque si es necesario ejecutar en ambos casos.
usar un goto, uno de los más infrautilizados palabras clave de nuestro día a día
Cheeting con un vacío else:
if (condition)
// do if stuff
else;
// do else stuff
Si no te gusta el hecho de que los demás;es en realidad un vacío else intente esto:
for (int ii=0; ii<2; ii++)
{
if (condition && !ii)
// do if stuff
else
{
// do else stuff
break;
}
}
Dos Soluciones posibles sin el uso de printf declaraciones :-
Primero :-
#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");
}
}
if (printf("hello") & 0)
{
printf("hello");
}
else
{
printf("world");
No hay necesidad de preocuparse por el valor de retorno de printf.
El abuso de preprocesamiento - con la limpieza por lo menos.
#define else
if(1)
{
printf("hello");
}
else
{
printf("world");
}
#undef else
La condición para esta pregunta es:
if(printf("hello")? 0 : 1) { }