Programmazione c

lepre561
Qualcuno saprebbe dirmi cos'è l errore " else without previous if" ???

scrivo un programma in cui bisogna verificare massimo e minimo


#include
#include
int main(void)
{
int N;
float numero;
float max,min;
printf("indicare quanti numeri saranno inseriti\n");
scanf("%d",&N);
if(N<=0)
printf("il programma non parte\n");
else
{ printf("inserisci il primo numero\n");
scanf("%f",&numero);
min=numero;
max=numero;
N=N-1;
while(N>0)
{
printf("Inserisci il numero successivo\n");
scanf("%d",&numero);
if(numero>max);
max=numero;
else
{
if(numero min=numero;
}
N=N-1;
}
printf("\n");
printf("il numero max è: %f, il numero min è: %f",max,min);
}
exit(0);
}


Dove sbaglio credo che le parentesi siano tutte giuste.

Risposte
apatriarca
Anche se il compilatore non ha bisogno che il codice sia ben formattato, fare uso di un codice ben formattato aiuta molto nel trovare errori di questo tipo. Ci sono strumenti per formattare il codice per te se non vuoi scrivere già tutto ordinato. Un'altro consiglio è quello di usare sempre parentesi intorno ai corpi di if/else/while/for.. anche quando non necessario. Nel codice ho inserito commenti per trovare dov'è l'errore.

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
    int N;
    float numero;
    float max, min;
    printf("indicare quanti numeri saranno inseriti\n");
    scanf("%d", &N);
    if (N<=0)
        printf("il programma non parte\n");
    else
    {
        printf("inserisci il primo numero\n");
        scanf("%f", &numero);
        min = numero;
        max = numero;
        N = N - 1;
        while(N>0)
        {
            printf("Inserisci il numero successivo\n");
            scanf("%d",&numero);
            if(numero>max)  ;   /* qui hai messo un punto e virgola di troppo */
                max=numero;
            else                /* qui dovrebbe esserci l'errore */
            {
                if(numero<min)
                    min=numero;
            }
            N=N-1;
        }
        printf("\n");
        printf("il numero max è: %f, il numero min è: %f",max,min);
    }
    exit(0);
}

lepre561
"apatriarca":
Anche se il compilatore non ha bisogno che il codice sia ben formattato, fare uso di un codice ben formattato aiuta molto nel trovare errori di questo tipo. Ci sono strumenti per formattare il codice per te se non vuoi scrivere già tutto ordinato. Un'altro consiglio è quello di usare sempre parentesi intorno ai corpi di if/else/while/for.. anche quando non necessario. Nel codice ho inserito commenti per trovare dov'è l'errore.

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
    int N;
    float numero;
    float max, min;
    printf("indicare quanti numeri saranno inseriti\n");
    scanf("%d", &N);
    if (N<=0)
        printf("il programma non parte\n");
    else
    {
        printf("inserisci il primo numero\n");
        scanf("%f", &numero);
        min = numero;
        max = numero;
        N = N - 1;
        while(N>0)
        {
            printf("Inserisci il numero successivo\n");
            scanf("%d",&numero);
            if(numero>max)  ;   /* qui hai messo un punto e virgola di troppo */
                max=numero;
            else                /* qui dovrebbe esserci l'errore */
            {
                if(numero<min)
                    min=numero;
            }
            N=N-1;
        }
        printf("\n");
        printf("il numero max è: %f, il numero min è: %f",max,min);
    }
    exit(0);
}



Quindi l'errore è solo il punto e virgola??

apatriarca
Non ho testato il programma, ma la ragione per cui ottenevi quell'errore è il punto e virgola. Hai provato a recompilare?

lepre561
"apatriarca":
Non ho testato il programma, ma la ragione per cui ottenevi quell'errore è il punto e virgola. Hai provato a recompilare?


grazie mille era quello l'errore :D

lepre561
"apatriarca":
Non ho testato il programma, ma la ragione per cui ottenevi quell'errore è il punto e virgola. Hai provato a recompilare?



scusa se ti disturbo nuovamente ma ho lo stesso problema con un altro programma ma questa volta i punti e virgola non c'entrano come risolvo???

#include
#include

int main(void)
{

int numero;
int min;
int max;
long prodotto;
long somma;
int contatore;
float media;
prodotto=1;
somma=0;
contatore=0;

printf("Se si inserisce il numero 999 il programma termina\n");
printf("inserire il primo numero\n");
scanf("%d",&numero);
if(numero==999)

contatore=contatore+1;
min=numero;
max=numero;
somma=somma+numero;
prodotto=prodotto+numero;
media=somma/contatore;
else{ -------------- /* qui sta il problema*/
while (numero!=999)
{
printf("inserisci il numero successivo");
scanf("%d",&numero);
somma=somma+numero;
prodotto=prodotto*numero;
if(numero>max)
max=numero;
else
if (numero min=numero;
}
printf("il totale dei numeri inseriti sono: %d, la lora somma è %d, il loro prodotto è: %d\n",contatore,somma ,prodotto);
printf("la media aritmetica dei numeri è: %f\n",media);
printf("il massimo è: %d, il minimo è:%d\n",max,min);


}

exit(0);
}

Super Squirrel
Alcuni consigli:

- per postare codice sul forum utilizza la funzionalità "Code";
- al fine di rendere il tutto più chiaro e leggibile, scrivi il codice rispettando la spaziatura e l'indentazione, inoltre utilizza le parentesi graffe anche quando il corpo di un istruzione di controllo (if, while, ...) è costituito da un solo rigo.

Premesso che non ho molta esperienza con il C, ti posto un esempio (tratto dal tuo esercizio) di quello che intendo:

#include <stdio.h>

int main()
{
    bool condizione = true;
    int contatore = 0;
    int somma = 0;
    int numero;
    float media;
    printf("Se si inserisce il numero 999 il programma termina\n");
    while(condizione)
    {
        printf("Inserire numero: ");
        scanf("%d", &numero);
        if(numero == 999)
        {
            condizione = false;
        }
        else
        {
            ++contatore;
            somma += numero;
        }
    }
    printf("contatore = %d\nsomma = %d\n", contatore, somma);
    if(contatore > 0)
    {
        media = (float)somma / contatore;
        printf("media = %.2f", media);
    }
}

vict85
Cerca di cercare di capire cosa ti dice il compilatore. Se l'errore è "else without previous if" allora è evidente che o non ha messo alcun if oppure lo scope dell'if precendente finisce prima dell'else a cui fa riferimento il compilatore.

Insomma ricorda che non mettere le parentesi in un if equivale a metterle intorno alla prima istruzione che segue l'if.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.