examples - ¿Cuál es la "condición" en la prueba de entrevista C?
modulus operator in c (30)
¿Sería posible imprimir Hello
dos veces con una sola condition
?
if "condition"
printf ("Hello");
else
printf("World");
Greg escribió:
No importa lo que use para la condición, ese fragmento imprimirá "Hola" o "Mundo", pero nunca ambos.
Bueno, esto no es cierto, pero por qué querrías que imprimiera ambos, no puedo 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 ... :)
Esto podría funcionar:
if (printf("Hello") - strlen("Hello"))
printf("Hello")
else
printf("World")
Este fragmento enfatiza el valor de retorno de printf
: la cantidad de caracteres impresos.
La instrucción if
ejecuta una u otra de las instrucciones controladas (ambas printf
en su ejemplo). No importa lo que use para la condition
, ese fragmento imprimirá "Hola" o "Mundo", pero nunca ambos.
Editar: Bien, entonces es una pregunta capciosa y puedes poner lo que quieras en la condición (incluyendo una llamada a una función completa que haga lo que quieras). Pero eso no es muy interesante. No puedo creer que me hayan modificado para dar una respuesta correcta.
Muchachos muy interesantes, gracias por las respuestas. Nunca hubiera pensado poner la declaración de impresión dentro de la condición if.
Aquí está el equivalente de Java:
if ( System.out.printf("Hello").equals("") )
System.out.printf("Hello");
else
System.out.printf("World");
#define CONDITION (0) if (0) {} else
o algo así.
Si ve una pregunta así en una entrevista, ¡huya tan rápido como pueda! El equipo que hace tales preguntas seguramente no será saludable.
Editar - Olvidé aclararlo - esto depende de que "lo demás" esté emparejado con el "si" abierto más cercano, y del hecho de que está escrito como "si CONDICIÓN" en lugar de si (CONDICIÓN) - el paréntesis haría que el rompecabezas no tuviera solución.
if (true) printf ("Hello"); if (false)
printf ("Hello");
else
printf("World");
if ( printf("Hello") == 0 )
printf ("Hello");
else
printf ("World");
:-)
if ( printf("Hello")==0)
ver [ http://www.coders2020.com/what-does-printf-return]
(Matt corrigió mi =, gracias, C está lejos)
if (printf("Hello") < 1)
printf("Hello");
else
printf("World");
if(printf("Hello") == 1)
printf("Hello")
else
printf("World")
"condition" === (printf("Hello"), 0)
Realmente cojo
int main() {
if (printf("Hello"), 0)
printf ("Hello");
else
printf("World");
}
Prefiero el uso del operador de coma porque no tiene que buscar el valor de retorno de printf
para saber qué hace el condicional. Esto aumenta la legibilidad y la facilidad de mantenimiento. :-)
Si está en Unix:
if (fork())
printf ("Hello");
else
printf("World");
Ofcoures que no garantiza el orden de las impresiones
No hay amor por la exit
?
if(printf("HelloWorld"), exit(0), "ByeBye")
printf ("Hello");
else
printf ("World");
Abróchense los cinturones 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;
}
Huellas dactilares:
if executed
else executed
¿Es esto lo que quieres decir? Lo dudo, pero al menos es posible. Usando fork
también puedes hacerlo, pero las ramas se ejecutarán en diferentes procesos.
Cheeting con una declaración else vacía:
if (condition)
// do if stuff
else;
// do else stuff
Si no te gusta el hecho de que más; es en realidad una declaración else vacía prueba esto:
for (int ii=0; ii<2; ii++)
{
if (condition && !ii)
// do if stuff
else
{
// do else stuff
break;
}
}
Comenta el "else";)
if(foo)
{
bar();
}
//else
{
baz();
}
Entonces ... ¿quieres 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ñada para ejecutarse solo si la instrucción if no se ejecuta y viceversa, ese es el punto completo. Esta es una pregunta extraña ...
La respuesta básica es que, en el curso normal de los acontecimientos, no desea ejecutar las instrucciones en el bloque ''if'' y el bloque ''else'' en una sola pasada del código (por qué molestarse con la condición si lo hace) ni puede ejecutas 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, es un abuso simple de (cualquier) idioma porque es equivalente a:
if (condition == true)
{
...stuff...
}
...more stuff...
Sin embargo, podría lograr lo que la pregunta está haciendo. 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;
}
No uses un bloque if else entonces.
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.
Simplemente coloque el código antes o después del bloque if..else.
Alternativamente, si tiene un bloque "if, else if, else" en el que desea ejecutar el código en algunas (pero no en todas) las ramas, simplemente colóquelo en una función separada y llame a esa función dentro de cada bloque.
Sin saber el valor de retorno de printf
en la parte superior de tu cabeza:
if (printf("Hello") && 0)
printf("Hello");
else
printf("World");
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 (solo para Unix y Linux):
int main(int argc, char* argv[])
{
if( !fork() )
{
printf("Hello ");
}
else
{
printf("World/n");
}
return 0;
}
utilice un goto, una de las palabras clave más infrautilizadas de nuestros días
int main()
{
runIfElse(true);
runIfElse(false);
return 0;
}
void runIfElse(bool p)
{
if(p)
{
// do if
}
else
{
// do else
}
}
Dos posibles soluciones sin utilizar declaraciones printf: -
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");
}
}
La condición para esta pregunta es:
if(printf("hello")? 0 : 1) { }
if (printf("hello") & 0)
{
printf("hello");
}
else
{
printf("world");
No es necesario preocuparse por el valor de retorno de printf.
Esto me suena como un rompecabezas 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
Abuso de preprocesamiento, con limpieza al menos.
#define else
if(1)
{
printf("hello");
}
else
{
printf("world");
}
#undef else
#include<stdio.h>
int main()
{
if(! printf("Hello"))
printf ("Hello");
else
printf ("World");
return 0;
}
Porque Printf devuelve el número de caracteres que ha impreso correctamente.