Requisito previo: if-else
Este artículo se enfoca en discutir lo que sucede cuando la declaración de impresión se usa dentro de la declaración condicional if-else.
Por ejemplo: Considere el siguiente código y prediga la salida.
C
// C program #include <stdio.h> // Driver code int main() { // if statement if (printf("I'm Awesome!\n")) // calling main() function main(); // else-if statement else if (printf("I'm Not Awesome\n")) // calling main() function main(); }
C++
// C++ program #include <iostream> using namespace std; // Driver code int main() { // if statement if (printf("I'm Awesome!\n")) // calling main() function main(); // else-if statement else if (printf("I'm Not Awesome\n")) // calling main() function main(); return 0; }
Java
// Java program to implement the above approach class GFG { public static void main(String[] args) { // if statement if (System.out.printf("I'm Awesome!\n") != null) // calling main() function main(null); // else-if statement else if (System.out.printf("I'm Not Awesome\n") != null) // calling main() function main(null); } } // This code contributed by Princi Singh
Python3
# Python program # Driver code # if statement if(print("I'm Awesome!")): # calling main() function def main(): # else-if statement elif(print("I'm Not Awesome")): # calling main() function def main(): # This code is contributed by shivanisinghss2110
C#
// C# program to implement the above approach using System; class GFG { public static void Main(String[] args) { // if statement if (Console.WriteLine("I'm Awesome!\n")) // calling Main() function Main(null); // else-if statement else if (Console.Write("I'm Not Awesome\n")) // calling Main() function Main(null); } } // This code is contributed by shivanisinghss2110
Javascript
<script> // javascript program to implement the above approach function main() { // if statement if (document.write("I'm Awesome!\n")) // calling main() function main(); // else-if statement else if (document.write("I'm Not Awesome\n")) // calling main() function main(); } main(); // This code contributed by shikhasingrajput </script>
Adivinando la salida esperada: la suposición más general para la salida de este programa es algún tipo de ERROR.
Salida real: Pero su salida real es un poco extraña y no la esperada.
Explicación: Vamos a discutir la razón.
- Como si la condición se cumpliera cada vez y debido a la llamada recursiva de la función main(), esta llamada de función idealmente continuará infinitamente, pero en el escenario real, se detendrá una vez que se llene la pila de llamadas de función permitida.
- Entonces, antes que nada, comprendamos por qué la función de impresión interna si la condición no da error y cómo funciona internamente.
- Este comportamiento se basa en el simple hecho de que la función de impresión como printf en C/C++, etc., devuelve un valor entero igual al número de caracteres que ha impreso correctamente.
Entendamos esto por un programa a continuación:
C
// C program to implement // the above approach #include <stdio.h> // Driver code int main() { // Nested printf function printf("%d", printf("GFG!\n")); return 0; }
C++
// C++ program to implement // the above approach #include <iostream> using namespace std; // Driver code int main() { // nested printf function printf("%d", printf("GFG!\n")); return 0; }
Java
// Java program to implement // the above approach import java.util.*; class GFG{ // Driver code public static void main(String[] args) { // nested printf function System.out.printf("%s", System.out.printf("GFG!\n")); } } // This code is contributed by 29AjayKumar
Python3
# Python program to implement # the above approach # Nested printf function print(print("GFG!\n")) # This code is contributed by shivanisinghss2110
C#
// C# program to implement // the above approach using System; class GFG{ // Driver code public static void Main(String[] args) { // nested printf function Console.Write("GFG!\n"); } } // This code is contributed by shivanisinghss2110
Javascript
<script> // JavaScript program to implement // the above approach // nested printf function document.write("GFG!\n"); // This code is contributed by shivanisinghss2110 </script>
GFG! 5
Explicación: cuando se encuentra la declaración printf, va a la función printf externa e intenta imprimir su valor y cuando el programa intenta imprimir su valor, encuentra otro printf y va a la función printf interna (como una llamada recursiva) para ejecutarlo. y luego lo ejecuta y esa función printf interna devuelve 5 porque esa función ha impreso con éxito 5 caracteres (‘G’, ‘F’, ‘G’, ‘!’ y ‘\n’) y, por lo tanto, devuelve un valor entero igual a 5 en este caso.
¿Se usará print() en el interior si siempre devuelve verdadero?
Del ejemplo anterior, se puede entender fácilmente cómo funcionan las funciones printf dentro de las declaraciones if y cómo se cumple la condición. La condición siempre se cumplirá hasta que se imprima una string vacía como se muestra en el siguiente código:
La única idea detrás de este ejemplo es demostrar si la función printf devuelve «0» solo entonces la condición if resultaría ser falsa. En todos los demás casos, será cierto si la longitud de la string es 1 o 9999.
C
// C program to implement // the above approach #include <stdio.h> // Driver code int main() { // printf function inside if statement if (printf("")) // printf function printf("Condition is True"); // else statement else // printf function printf("Condition is False"); return 0; }
C++
// C++ program to implement // the above approach #include <iostream> using namespace std; // Driver code int main() { // printf function inside if statement if (printf("")) // printf function printf("Condition is True"); // else statement else // printf function printf("Condition is False"); return 0; }
Java
// Java program to implement // the above approach import java.io.*; class GFG { // Driver code public static void main (String[] args) { // printf function inside if statement if (System.out.print("")) // printf function System.out.print("Condition is True"); // else statement else // printf function System.out.print("Condition is False"); } } // This code is contributed by shivanisinghss2110.
Python3
# Python program to implement # the above approach # print function inside if statement if (print("")): # print function print("Condition is True") # else statement else: # print function print("Condition is False") # This code is contributed by shivanisinghss2110.
C#
// C# program to implement // the above approach using System; class GFG { // Driver code public static void Main (String[] args) { // printf function inside if statement if (Console.Write("")) // printf function Console.Write("Condition is True"); // else statement else // printf function Console.Write("Condition is False"); } } // This code is contributed by shivanisinghss2110
Javascript
<script> // JavaScript program to implement // the above approach // printf function inside if statement if (document.write("")) // printf function document.write("Condition is True"); // else statement else // printf function document.write("Condition is False"); // This code is contributed by shivanisinghss2110. </script>