PROBLEMA [C] Output scorretto

jpergn

Nuovo Utente
26
0
salve a tutti, sto programmando un piccolo programma che prendendo 8 numeri naturali in un array li somma e fa la media, i risultati in output sono sbagliati e non so perchè, qualcuno che mi dia una mano?

C++:
#include <stdio.h>

void carray(int v[]);
int somma(int v[]);
int media(int v[]);

int main()
{
int scelta,s,m;
int v[8];

do
{
    printf("dammi le 8 cifre di cui fare somma e media\n");

    carray(v);

        s=somma(v);
        printf("il risultato della somma e %d",s);
        m=media(v);
        printf("il risultato della media e %d",m);





    printf("per ripetere il programma premi un tasto diverso da 1");
    scanf("%d",&scelta);

}
while(scelta!=1);
}
//funzione carray
void carray (int v[])
{
int i;

for(i=0;i<8;i++)
{
    scanf("%d \n",&v[i]);
}
}
//funzione che somma i valori del array
int somma (int v[])
{
int i,s;

for(i=0;i<8;i++)
{
    s=s+v[i];
}
return s;
}
//funzione media
int media (int v[])
{
int i,s,m;

for(i=0;i<8;i++)
{
    s=s+v[i];
}
m=s/8;
    return m;
}
 

Allegati

  • Immagine.png
    Immagine.png
    125.8 KB · Visualizzazioni: 34
U

Utente cancellato 371741

Ospite
Le variabili che si allocano nello stack non sono inizializzate. Devi inizializzarle tu.
In particolare, setta int s = 0; sia in media() che in somma().

Le variabili globai invece, non serve mettere int x = 0; perche sono inizializzate a 0 in automatico dal c runtime.
 

jpergn

Nuovo Utente
26
0
Le variabili che si allocano nello stack non sono inizializzate. Devi inisializzarle tu.
In particolare, setta int s = 0; sia in media() che in somma().
l' avevo appena corretto, stavo per scrivere che avevo risolto, grazie mille, funziona adesso,non capisco però perchè input mi fa inserire 9 numeri al posto di 8
 
U

Utente cancellato 371741

Ospite
togli \n dallo scanf

per altro, perche c++ ? Tuo codice e' a tutti gli effetti C
 
U

Utente cancellato 371741

Ospite
Dunque,

1) se il professore ti ha dato il compitino dicendoti che e' c++, digli pure che quello e' codice C e si compila con compilatore c, c++ non serve a nulla.

2) video ne saranno, ma prova a vedere se capisci da qui sotto, Quando vuoi passar un indirizzo, o passi un puntatore, che e' un indirizzo, o passi l'offset di una variabile, con &variablie. Per accedere alla variabile poi si usa *puntatre, cioe accedi al valore "puntato da" variabile puntatore. I puntatori sono la parte forse piu complessa da capire del C, perche poi trovarai &*var o **var e molto altro, richiedono lungo tempo per essere capiti.

Codice:
#include <stdio.h>

void stampa(int *puntatore_ad_a) {
    printf("test %d\n", *puntatore_ad_a);
}

int main() {
    int a = 45;

    stampa(&a);

    return 0;
}
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili