es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo terminar mi programa si scanf falla (en C)?


<h1>include <stdio.h></h1> <p>int Set1PColour(char *P1Colour) { char colour; do { printf("Elige un color inicial (A)marillo o (R)ojo: "); if (scanf(" %c", &colour) != 1) { return 1; } *P1Colour = colour; } while ((colour != 'R') && (colour != 'A')); return 0; }</p> <p>int main() { char P1Colour; if (Set1PColour(&P1Colour) == 1) { return 0; } printf("\nNo se devolvió cero.");</p> <pre><code>return 1; </code></pre> <p>}

Mi objetivo para mi programa es terminarlo si falla scanf en una función.

¿Cómo puedo asegurarme de que el programa termine sin imprimir “No se devolvió cero”?

Básicamente, esperaba que el programa terminara en esta línea una vez que ingresara un valor como 4.5, pero simplemente continúa.
c
if (Set1PColour(&P1Colour) == 1)
{
return 0;
}

¡Cualquier ayuda es apreciada!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para asegurarte de que el programa termine sin imprimir “Zero was not returned”, debes modificar el valor de retorno de la función main basado en el valor de retorno de la función Set1PColour.

    Si Set1PColour devuelve 1, significa que scanf falló y debes terminar el programa inmediatamente. En este caso, simplemente debes devolver 1 desde la función main, lo cual señalará un error al sistema que lo llamó sin imprimir nada.

    Aquí está el código actualizado:

    #include <stdio.h>
    int Set1PColour(char *P1Colour)
    {
        char colour;
        do
        {
            printf("Por favor elige un color inicial (A)marillo o (R)ojo: ");
            if (scanf(" %c", &colour) != 1)
            {
                return 1;
            }
            *P1Colour = colour;
        } while ((colour != 'R') && (colour != 'A'));
        return 0;
    }
    
    int main()
    {
        char P1Colour;
        if (Set1PColour(&P1Colour) == 1)
        {
            return 1; // terminar el programa inmediatamente
        }
        printf("\nZero was not returned.");
    
        return 0;
    }
    

    En el código actualizado, si Set1PColour devuelve 1, la función main devuelve inmediatamente 1 sin imprimir nada. De lo contrario, imprime “Zero was not returned” y devuelve 0 para señalar una terminación exitosa.</stdio.h>

Comments are closed.