Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84

    [C]Problema con numeri non interi

    Salve.
    Ho da poco iniziato a programmare in C. Ho fatto un semplice programma per calcolare la media di più liste di numeri. Nel momento in cui il programma chiede quante liste o quanti numeri per lista bisogna inserire, ho messo la condizione che se n(int) è < 0 oppure == 0 ovviamente il programma da errore perchè il numero delle liste o dei valori deve essere positivo. Tuttavia ho notato che se si mette un valore con la virgola il programma non funziona correttamente. Come faccio a mettere una condizione che fa comparire errore nel caso in cui anzicchè inserire un intero si inserisce un float?
    Grazie mille.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Perche' non mostri il codice che hai scritto?

    In particolare, come hai dichiarato la tua variabile n ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di braian
    Registrato dal
    Apr 2007
    Messaggi
    35
    intanto se inserisci il codice è meglio, in teoria un operatore di confronto funziona anche sui float

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    Vi posto tutto il programma. Scusatemi se è un pò disordinato. In pratica guardate le variabili n(numero di valori) e loopcount (numero di liste). Sono degli int e vorrei fare apparire un errore se per caso per sbaglio si inserisce un numero con la virgola a programma lanciato. Ditemi se ci sono parti di codice che posso scrivere in modo più sintetico. Grazie






    #include <stdio.h>
    #include <conio.h>

    main() /* PROGRAMMA CHE PERMETTE DI CALCOLARE LA MEDIA DI PIU' LISTE DI NUMERI */
    {
    int n, count=1, loop, loopcount;
    float x, media, somma=0, max, min;

    printf("Benvenuto!");

    Inizio:

    printf("\n\nQuante liste di numeri? (Inserire il valore 0 per chiudere l'applicazione)\n\n");
    scanf("%d", &loop);

    while(loop != 0)
    {
    if (loop<0)
    {printf("\a\nErrore! Inserire un valore positivo.");
    goto Inizio;}

    for(loopcount=1; loopcount <= loop; ++loopcount) /*Ciclo for principale*/
    {
    printf("\n\nLISTA %d. Quanti numeri? ", loopcount);
    scanf("%d", &n);

    if (n==0)
    {printf("\a\nErrore! E' necessario almeno un numero.");
    goto Inizio;}

    else if (n<0)
    {printf("\a\nErrore! Inserire un valore positivo.");
    goto Inizio;}

    printf("\nNumero %d: ", count); /*Lettura del primo valore che viene nominato temporaneamente massimo e minimo*/
    scanf("%f", &x);
    somma += x;
    max = x;
    min = x;

    for(count=2; count<=n; ++count) /*Lettura dei valori successivi (dal secondo in poi)*/
    {
    printf("\nNumero %d: ", count);
    scanf("%f", &x);

    somma += x;

    if(x>=max) /*I nuovi valori vengono confrontati ad ogni ciclo col primo valore acquisito per stabilire se sono più grandi o più piccoli*/
    max=x;
    else if (x<min)
    min=x;
    }

    media= somma/n;

    printf("\n\nLa media e': %f", media);
    printf("\n\nMAX: %f", max);
    printf("\n\nMIN: %f", min);

    count=1; /*I valori di count e di somma vengono resettati per i cicli successivi*/
    somma=0;
    }
    printf("\n\nFINE. Premere un tasto per riavviare l'applicazione...");
    getch();
    goto Inizio;
    }
    }

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se usi una variabile di tipo intero, non hai modo di fare quel controllo ma non capisco quali siano i problemi dato che il corretto valore intero viene comunque memorizzato nelle due variabili intere. Altrimenti dovresti fare l'input di una stringa (un array di char) e controllare carattere per carattere ... mi sembra inutile ...

    Per il resto, quello che salta agli occhi e' l'uso del goto ... dovresti farne a meno ... utilizza correttamente i cicli al suo posto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    84
    Si tutti mi dicono di non usarlo ma cosa fare al suo posto? Come posso tornare all'inizio del programma senza il goto?

  7. #7
    Come posso tornare all'inizio del programma senza il goto?
    Potresti racchiudere il codice in un loop do-while, permettendo così di scegliere all'utente di specificare con una risposta S/N (SI/NO) l'intenzione di ripetere l'esecuzione o meno.

    Esempio didattico:

    codice:
    #include <stdio.h>
    #include <conio.h>
    
    int main(void)
    {
    	int i, fine;
    	do{
    		for (i = 0; i < 10 ; ++i)
    			puts("PREMI ESC PER USCIRE O UN ALTRO TASTO PER RIPETERE L'ESECUZIONE DALL'INIZIO");
    		
    		fine = getch();
    	}
    	while (fine != 27); // 27 = TASTO ESC
    	return 0;
    }
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.