Функция yes_or_no должна возвращать 1 или 0 и, основываясь на этом, завершать или выполнять цикл программы, но цикл выполняется вечно

#c

#c

Вопрос:

 int yes_or_no (void) {              //Funcion yes_or_no. Confirma si el usuario quiere salir del usuario despues de seleccionar la opcion "EXIT".
    char opcion2;
    
    fprintf (stdout ,"Has seleccionado "Exit".n");
    fprintf (stdout ,"Are you sure you want to exit y/n?: n");
    fscanf (stdin ," %c", amp;opcion2);
    
    if ((opcion2 == 'y') || (opcion2 == 'Y'))
        {
            fprintf (stdout ,"Ha seleccionado "Si".n");
        valor = 0;
        return valor;
        
        }
        
    if ((opcion2 == 'n') || (opcion2 == 'N'))
        {
            fprintf (stdout ,"Ha seleccionado "No".n");
        valor = 1;
        return valor;
        
        }
    else 
        { 
            fprintf (stdout ,"No ha seleccionado una opcion validan"); 
        valor = 1;
        return valor;
        
    }
}

int main() 
{
    char opcion;
    char opcion2;
    char * APLICACION;
    char caracter;
    char caracterhl;
    int valor;
    int Date;
    char *Name;
    char *mensaje;
    int edad;
    FILE *ficheromensaje;
    
    fprintf (stdout ,"Introduce una cadena: n");
    fscanf (stdin ,"%s", APLICACION); 
    
    fprintf (stdout ,"Introduce un caracter: n");
    fscanf (stdin ," %c", amp;caracterhl);
    
    fprintf (stdout ,"Introduce un segundo caracter: n");
    fscanf (stdin ," %c", amp;caracter);
    
    stripe (caracter);
    headline (APLICACION ,caracterhl);     //Imprime la carátula.
    stripe (caracter);
    
    do {
        fprintf (stdout ,"R) Register for a patientn");
        fprintf (stdout ,"S) Search for a patientn");
        fprintf (stdout ,"D) Discharge a patientn");
        fprintf (stdout ,"L) List patients by agen");          //Presenta el menú del programa.
        fprintf (stdout ,"X) Exit the programn");
        fprintf (stdout ,"Choose an optionn");
        fscanf (stdin ," %c" ,amp;opcion);
        
        switch (opcion) {
            case 'R':
            fprintf (stdout ,"R) Register for a patientn");
            break;
            
            case 'S': 
            fprintf (stdout ,"S) Search for a patientn");
            break;
            
            case 'D':
            fprintf (stdout ,"D) Discharge a patientn");
            break;
            
            case 'L':
            fprintf (stdout ,"L) List patients by agen"); 
            break;
            
            case 'X':   
            yes_or_no ();
            if (valor = 0) {
                break;
            }
            else {
                valor = 1;
                continue;
            }
            
            default:
            fprintf (stdout ,"Opcion no validan");
            break;
        }
    } while (yes_or_no() == 1);
    
    return 0;
}

 

Программа запрашивает символ, если это X, он переходит в функцию yes_or_no, где он спрашивает пользователя, хочет ли он выйти, если ответ Y или y, он присваивает valor значение 0 и возвращает эту переменную, и если ответ N или n или что-то ещеполностью он присваивает valor значение 1 и возвращает переменную. Затем, если значение valor равно 0, программа должна завершиться на этом, а если значение равно 1, она должна вернуться в меню (прямо перед функцией переключения), но программа не завершается, независимо от ответа yes_or_no функции.

Ответ №1:

Сначала вам нужно объявить valor внутри функции int valor; . После этого ваша функция возвращает целое число, но в вашем основном вы не присваиваете никакой переменной для хранения значения return , тогда вы должны do valor = yes_or_no(); , и в условии do-while также используйте переменную valor

Ответ №2:

как сказал @Hss, вы должны объявить переменную valor в функции.

В этой части вашего кода вы должны изменить условие в «ЕСЛИ». измените это -> if (valor = 0) в этом -> if (valor == 0)

 case 'X':   
    yes_or_no ();
    if (valor == 0) {
    break;
    }
    else {
    valor = 1;
    continue;
    }