Piccolo problema con un programma in C

di Anonimizzato23529 il
13 risposte
Salve a tutti,
stavo provando a fare un esercizio su alcune funzionalità del linguaggio C (ho iniziato da poco a programmare), quando una volta che provo il programma non mi esegue alcune funzioni.


#include <stdio.h>
int main() {
    int A,B,C,D,E,F;
    
    printf("\n Inserisci la tua data di nascita\n");
    scanf ("%d.%d.%d",&A,&B,&C);
    
    printf("\n Ora inserisci il giorno corrente\n");
    scanf("%d.%d.%d",&D,&E,&F);
    
    int anni;
    
    anni = F - C;
    
    if (A>D && B>E){
    
         anni = anni - 1;
        
        
        printf("La tua età è %d\n",anni);
            
        }
    

    else{
    
        printf("La tua età è %d\n",anni);
        
    }

    float frequenza_cardiaca_max,frequenza_cardiaca_media1,frequenza_cardiaca_media2;
    
    frequenza_cardiaca_max = 220 - anni;
    
    printf("\nLa tua frequenza cardiaca massima è %f",frequenza_cardiaca_max);
    scanf("%f",&frequenza_cardiaca_max);
    
    printf("ORA");
    frequenza_cardiaca_media1 = frequenza_cardiaca_max * (50 / 100);
    
    frequenza_cardiaca_media2 = frequenza_cardiaca_max * (80 / 100);

    
    
    printf("\nLa tua frequenza cardiaca media è tra %f e %f", frequenza_cardiaca_media1,  frequenza_cardiaca_media2);
    scanf("%f",&frequenza_cardiaca_media1);
    scanf("%f",&frequenza_cardiaca_media2);
    
    }

Il mio problema sta nela fatto che dal PRINTF contente "ORA" (incluso lo stesso) non mi fa più nulla, quindi non mi esegue le funzioni di printf e non mi stampa gli ultimi pezzi di codice.

Sapete per caso come risolvere? Grazie mille

P.S. Per programmare uso XCODE

13 Risposte

  • Scusa ma perchè dopo aver stampato "La tua frequenza cardiaca massima è" richiedi in input frequenza_cardiaca_max? Non l'hai già calcolata?
  • E lo stesso fai dopo ... A che servono le scanf finali?
  • Indipendentemente dalle scanf (che effettivamente non so perchè siano lì), la printf prima delle scanf dovrebbe farla. Prova a mettere su Xcode un breakpoint sulla printf("ORA") e da lì esegui il codice riga per riga e vedi cosa succede.. magari viene lanciata un'eccezione per qualche motivo
  • Il mio programma si basa sul calcolare la frequenza cardiaca media che è la frequenza cardiaca massima moltiplicata per 50% e per 80%. Quindi dopo aver calcolato la frequenza cardiaca massima pensavo di moltiplicarla per quei valori e poi stamparli mediante printf e salvarli con scanf. Ecco perchè uso più volte la frequenza cardiaca massima.Solo che non funziona.
  • leonsirio ha scritto:


    e salvarli con scanf
    Cosa ti aspetti che faccia scanf()?
  • Salvarli con scanf??
  • Si, forse ho fatto un po’ di confusione con scanf. Per caso mi potreste spiegare brevmente il suo funzionamento oppure sapreste per caso dove trovare una descrizoone di cosa faccia scanf?

    In ogni caso il problema persiste, appena riesco ad accedere al computer vi faccio sapere se riesco a riosolvere.

    Grazie mille per il vostro tempo
  • Se non sai cosa fa scanf() perchè la richiami?
  • Cioè nel senso, penso che la scanf serva per salvare la variabile ed estrarla mediante la e commerciale (&). Ripeto che sono alle prime armi quindi vi prego di perdonarmi errori banali.
  • Ora ho provato a togliere i tre scanf dal programma ed effetivamente funziona. Qualcuno saprebbe spiegarmi il perchè? Grazie mille

    Poi ho notato che però i valori di frequenza cardiaca media 1 e 2 mi vengo sempre 0.000000 e non capisco il perchè.
    Grazie mille
  • Scanf aspetta che da standard input (tastiera di default) arrivi un valore che andrà inserito nella cella di memoria a cui punta la variabile. Se dichiari: int a =0 tu non vedi in memoria dove è salvata la variabile a, semplicemente ti interessa il suo valore che è 0. Se tu scrivi &a il valore che ti viene ritornato è il numero della cella di memoria in cui la variabile a è salvata e il suo valore non sarà 0, ma un numero enorme che rappresenta la sua locazione all'interno della memoria.
    Se tu scrivi scanf(%d,&a) stai dicendo: inserisci qualcosa da tastiera e quando premi invio interpretamelo come un numero interno e salva il valore nella variabile a.
    Ti starai chiedendo: perché non scrivere direttamente solo a? Per questa risposta leggi una qualunque guida ai puntatori C.
    E non farti problemi a domandare che non esistono domande banali
    Riguardo agli 0.00000 non ho provato il tuo codice, ma da scanf cerca di evitare formattazioni strane della stringa di input: se devi inserire un float scrivi "%f" senza caratteri in mezzo.. da linea di comando è facile sbagliare su queste cose.. secondo me da 0 perché non è riuscito a interpretare il tuo input come un float
  • Ho risolto invece che (50/100) ho messo direttamente 0.5 e la stessa cosa per la seconda frequenza cardiaca.

    Grazie mille a tutti per le risposte
Devi accedere o registrarti per scrivere nel forum
13 risposte