¿Qué sucederá si se escribe una declaración de impresión() dentro de un if(), como if (print())

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.
 

Output#1

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>
Producción

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>

output#2

Publicación traducida automáticamente

Artículo escrito por anuragayu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *