Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [c]Media ascisse ed ordinate

    Salve a tutti.
    Sto studiando da poco il linguaggio C e mi risulta di facile comprensione, ma, quando devo mettere mano al codice vero e proprio, sorge sempre qualche problema.
    Guardate questo esercizio: devo fare la media delle ascisse e delle ordinate dei punti dati in input. Al momento dell'esecuzione, il terminale mi chiede di inserire come input il nome del punto e la sua ascissa ed ordinata, così come da me richiesto. Il problema sorge dopo l'inserimento del primo punto: dopo aver digitato l'ordinata di quest'ultimo, infatti, ciò che mi viene richiesto è: Inserire nome punto: Inserisce ascissa. Ma no! Dovrei prima inserire il nome del punto e poi inserire la sua ascissa! Il problema è sicuramente la variabile array char "punti". Dov'è che sbaglio? Qualcuno sa darmi una mano? Vi allego qui di seguito il codice.

    codice:
    #include <stdio.h>
    int main(void){
    float x[20],y[20],media_x=0,media_y=0;
    char punti[20];
    int cont;
    for(cont=0;cont<20;cont++){
    printf("Inserire nome punto: ");
    scanf("%c",&punti[cont]);
    printf("Inserire la sua ascissa: ");
    scanf("%f",&x[cont]);
    printf("Inserire la sua ordinata: ");
    scanf("%f",&y[cont]);
    media_x+=x[cont];
    media_y+=y[cont];
    }
    printf("\n------------------------------\nIl centroide ha ascissa pari a %f ed ordinata pari a %f------------------------------\n",(media_x/20),(media_y/20));
    return 0;
    }
    Confido in voi
    Buona domenica a tutti

    Marco

  2. #2
    Utente di HTML.it L'avatar di sotoli
    Registrato dal
    Mar 2008
    Messaggi
    150
    Ciao, quando inserisci da console il valore del primo punto y e premi enter vai ad inserire nello stdin il valore del punto e il carattere newline "\n" (poiché devi premere enter per confermare).
    Il valore del punto viene assegnato alla variabile y, ma il carattere \n rimane nello stdin e viene prelevato direttamente dalla successiva scanf del nome del secondo punto senza bisogno che l'utente digiti da console un nuovo nome.
    Quindi per il programma il nome del secondo punto è "\n".
    Crestron Control Systems and AMX Control Systems Programmer

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Mi sembra che ci sia un equivoco ... quando fai l'input del "nome punto" tu inserisci solamente un carattere. E' questo quello che vuoi fare o vuoi inserire una stringa e non un solo carattere?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Vi ringrazio per le risposte. Sotoli ho capito ciò che mi hai gentilmente spiegato, ma come pensi che io possa risolvere il problema?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da marco476
    Vi ringrazio per le risposte.
    Sì, ma io ti ho fatto una domanda ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Perdonami.
    Il mio intento e' di inserire un singolo carattere char che identifichi inequivocabilmente un punto (P,C,A,B ecc.).

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Dopo l'ultima scanf inserisci la linea

    while(getchar()!='\n');

  8. #8
    Ti ringrazio, utilizzando quell'istruzione tutto fila liscio.
    Risolto un problema, ne sorge un altro dello stesso stampo: perchè in questo caso il programma, una volta compilato, crasha subito dopo aver inserito i primi due numeri?
    Vi allego il codice:

    codice:
    #include <stdio.h>
    void modifica(int b[]);
    int main(void){
    int a[5],c;
    for(c=0;c<5;c++)
    scanf("%d",a[c]);
    printf("\n");
    for(c=0;c<5;c++)
    printf("%2d",a[c]);
    modifica(a);
    for(c=0;c<5;c++)
    printf("%2d",a[c]);
    return 0;
    }
    
    void modifica(int b[]){
        int v;
        for(v=0;v<5;v++)
        b[v]=v;
    }
    Chiedo scusa per la perdita di tempo e grazie per l'aiuto.

    Marco

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da marco476
    ... perchè ...
    Controlla la scanf ... cosa sbagli?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    La &?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.