Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106

    [C]Inserimento dati usando struct e puntatori

    Salve a tutti non so se il titolo può andare bene perchè non so spiegare brevemente il problema che ho.
    Ho scritto un programma che mi dovrebbe permettere di inserire i dati di automobili.
    codice:
     #include<stdio.h>
    #include<malloc.h>
    struct automobile{
           char marca[20];
           char modello[20];
           int vendute[20];
           } a;
    int *p,i;
    struct automobile dettagli[20];
    char risp;
           
    main()
    {
          for(i=0;i<30;i++){
                             printf("Vuoi inserire elementi nella lista? (s/n): ");
                             scanf("%c",&risp);
                             getchar();
                             if(risp=='s' || risp=='S'){
                                          printf("\nDettagli automobile: \n\n");
                                          printf("Marca : ");
                                          scanf("%s",dettagli[i].marca[i]);
                                          printf("Modello: ");
                                          scanf("%s",dettagli[i].modello[i]);
                                          printf("Unita' vendute: ");
                                          scanf("%d",&dettagli[i].vendute[i]);
                                          }
                             }
                             
          system("PAUSE");
    }
    Il primo inserimento va tutto bene metto s e mi fa inserire i dettagli dell'auto. al secondo inserimento quando mi chiede vuoi inserire elementi nella lista se metto s me lo richiede s rimetto s la stessa cosa e così via. Solo se quando mi chiede la seconda volta vuoi inserire....ammacco invio me lo richiede ma questa volta mettendo s mi fa inserire i dati...sapete qual'è il problema?? Un'altra cosa è giusto dichiarare il vettore automobile come ho fatto io dato che deve contenere dati diversi?? grazie per 'aiuto

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: [C]Inserimento dati usando struct e puntatori

    In rosso le correzioni

    codice:
    #include <stdio.h>
    // #include<malloc.h>  // inutile
    
    struct automobile
    {
           char marca[20];
           char modello[20];
           int vendute;  // l'intero è uno solo, non 20
           };  // la a non serve 
    
    int i;  // *p non viene usato 
    
    struct automobile dettagli[30];  // nel ciclo ne usi 30 
    char risp;
           
    int main() // va inserito sempre 
    {
          for(i=0;i<30;i++)
          {
                 printf("Vuoi inserire elementi nella lista? (s/n): ");
                 scanf("%c",&risp);
                 // getchar();  // inutile 
                 if(risp=='s' || risp=='S')
                 {
                         printf("\nDettagli automobile: \n\n");
                         printf("Marca : ");
                         scanf("%s",dettagli[i].marca);  // si indica la stringa 
                         printf("Modello: ");
                         scanf("%s",dettagli[i].modello);  // si indica la stringa 
                         printf("Unita' vendute: ");
                         scanf("%d",&dettagli[i].vendute);  // non esiste un array
                 }
                 else break;  // altrimenti non esce per No 
    
                 while(getchar()!='\n') ;  // per evitare i problemi dell'input
           }
                             
          system("PAUSE");
          return 0;  // da inserire 
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Pragmaticamente parlando non è corretto usare l' istruzione break, semmai usa un booleano,nella condizione del for ci metti che quel booleano deve essere vero (o falso), se vuoi uscire dal ciclo lo setti a false (o true).

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da ramy89
    Pragmaticamente parlando ...
    Semmai "teoricamente parlando" perché "pragmaticamente" il break va benissimo ...

    Direi che certe sottigliezze, per adesso, le possiamo risparmiare a giumanji ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Invece no, meglio se ci si abitua sin dall' inizio a non usare goto, break e continue.
    La break è simile al goto perchè è un jump alla prima istruzione fuori dal ciclo.
    Io l' ho detto, poi ognuno può fare come vuole.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da ramy89
    Invece no, meglio se ci si abitua sin dall' inizio a non usare goto, break e continue.
    La break è simile al goto perchè è un jump alla prima istruzione fuori dal ciclo.
    Penso di sapere cosa sia la break ...

    In molti casi, però, la break può risultare più chiara (come per il semplice caso in questione) proprio come il goto.

    Bisogna abituarsi sin dall'inizio a discernere i vari casi con oculatezza e non ragionare in maniera "estremista" ...

    Io l' ho detto, poi ognuno può fare come vuole.
    Ovviamente ... anche io ... senza problemi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    ahahah non litigate però cmq grazie a entrambi ! xò non ho capito alcui errori che oregon mi ha segnalato...questi qui
    codice:
    int main() // va inserito sempre 
    perchè l'int prima del main? non l'ho mai messo ...ho sempre utilizzato il main e basta 
    
     scanf("%s",dettagli[i].marca);  // si indica la stringa 
                         printf("Modello: ");
                         scanf("%s",dettagli[i].modello);  // si indica la stringa 
                         printf("Unita' vendute: ");
                         scanf("%d",&dettagli[i].vendute);  // non esiste un array
    che vuoi dire indica la stringa??

  8. #8
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Non è un' opinione, è comprovato:
    http://www.u.arizona.edu/~rubinson/c...d_Harmful.html

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da giumanji
    ahahah non litigate però
    Ma no ... si discute ...

    perchè l'int prima del main?
    Perché lo standard lo prevede.

    Anche se alcuni compilatori non obbligano ad usarlo (e puoi tranquillamente non usarlo finché non hai la necessità di farlo) è bene che tu sappia che è così.

    main è una funzione come le altre e come le altre deve avere un tipo di dato da restituire (al sistema operativo).

    che vuoi dire indica la stringa??
    Che

    dettagli[i].marca

    è il puntatore alla stringa (al vettore di char) e non dettagli[i].marca[i]
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Originariamente inviato da giumanji
    ahahah non litigate però cmq grazie a entrambi ! xò non ho capito alcui errori che oregon mi ha segnalato...questi qui
    codice:
    int main() // va inserito sempre 
    perchè l'int prima del main? non l'ho mai messo ...ho sempre utilizzato il main e basta 
    
     scanf("%s",dettagli[i].marca);  // si indica la stringa 
                         printf("Modello: ");
                         scanf("%s",dettagli[i].modello);  // si indica la stringa 
                         printf("Unita' vendute: ");
                         scanf("%d",&dettagli[i].vendute);  // non esiste un array
    che vuoi dire indica la stringa??
    Se non specifichi che è int main, ma scrivi solo "main", di default ritorna int.
    Ogni funzione ha un valore di ritorno, la main è una funzione.
    Sarebbe una procedura se fosse "void main", ma non è contemplato dal C standard.
    Il valore di ritorno serve a segnalare vari errori, se il main ritorna zero significa che è terminato correttamente.

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.