Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    69

    [c] due domandine

    Codice PHP:
    #include<stdio.h>
    struct tipo{
           
    int num;
           
    char nome[30];
           
    char cognome[30];
           
    int eta;
           };
           
           
    main()
           {
                 
    typedef struct tipo record;
                 
    record rubrica;
                 
                 
    FILE *punta;
                 
                 if((
    punta=fopen("rubrica.dat""w"))==NULL)
                    
    printf("Il file non può essere creato.\n");
                 else
                 {
                     
    printf("Inserisci la posizione in cui intendi scrivere\n"
                            "da 1 a 100 oppure 0 per uscire\n\n"
    );
                     
    scanf("%d", &rubrica.num);
                     
                     while(
    rubrica.num !=0)
                        {
                           
    printf("Inserisci Nome, Cognome, età: ");
                           
    scanf("%s%s%d", &rubrica.nome,&rubrica.cognome,&rubrica.eta);
                        
                           
    fwrite(&rubricasizeof(record),1,punta);
                        
                           
    printf("Inserisci la posizione in cui intendi scrivere\n"
                            "da 1 a 100 oppure 0 per uscire\n\n"
    );
                           
    scanf("%d", &rubrica.num);
                        }
                        
    fclose(punta);
                 }

    Domanda 1 - Perchè nello scanf (interno al while) si usa & per assegnare il valore di input aglli array contenuti nella struct? non sono sempre puntatori al loro primo membro?

    Domanda 2 - Come faccio a prendere in input anche lo spazio? Mi spiego, l'utente immette un nome del tipo Paolo Antonio, il programma così com'è assegna Paolo a .nome e Antonio a .Cognome.

    Grazie anticipate

  2. #2
    Domanda 1 - Perchè nello scanf (interno al while) si usa & per assegnare il valore di input aglli array contenuti nella struct? non sono sempre puntatori al loro primo membro?
    Si , l'identificatore del vettore è il puntatore al primo elemento, ma si usa sempre &
    Domanda 2 - Come faccio a prendere in input anche lo spazio? Mi spiego, l'utente immette un nome del tipo Paolo Antonio, il programma così com'è assegna Paolo a .nome e Antonio a .Cognome.
    scanf ("%[^\n]s", &stringa);
    così leggi dino a \n
    Experience is what you get when you don’t get what you want

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: [c] due domandine

    Originariamente inviato da liberlux
    Domanda 1 - Perchè nello scanf (interno al while) si usa & per assegnare il valore di input aglli array contenuti nella struct? non sono sempre puntatori al loro primo membro?
    scanf("%d", &rubrica.num);
    in questo caso ci vuole la & perché rubrica.num è un int

    scanf("%s%s%d", &rubrica.nome,&rubrica.cognome,&rubrica.eta);
    in questo caso, la & è superflua su rubrica.nome e rubrica.cognome perché sono degli array.
    All'interno di una espressione, il solo nome di un array denota già il suo indirizzo. Quindi:

    scanf("%s%s%d", rubrica.nome, rubrica.cognome, &rubrica.eta);

    Originariamente inviato da liberlux
    Domanda 2 - Come faccio a prendere in input anche lo spazio? Mi spiego, l'utente immette un nome del tipo Paolo Antonio, il programma così com'è assegna Paolo a .nome e Antonio a .Cognome.
    Non puoi, non con la scanf. I "whitespace" (tab, spazi, ecc...) vengono saltati, fungono da "separatori".
    O usi una fgets() per leggere una intera riga, o usi qualcos'altro.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4

    Re: Re: [c] due domandine

    Originariamente inviato da andbin
    Non puoi, non con la scanf. I "whitespace" (tab, spazi, ecc...) vengono saltati, fungono da "separatori".
    O usi una fgets() per leggere una intera riga, o usi qualcos'altro.
    scanf ("%[^\n]s", &stringa);

    ...

    Però fare &vettore non è uguale a vettore
    il primo è l'indirizzo del puntatore al primo elemento o sbaglio ?
    Experience is what you get when you don’t get what you want

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    69
    ok, esaustivi, in effetti anche io pensavo che & fosse superfluo affiancato agli array, nonostante questi fossero parte di una struct, approfitto per un altra domanda, ma per creare un file ad accesso casuale, che successivamente dovrà essere letto, bisogna per forza inizializzarlo oppure no?

  6. #6
    No basta aprirlo in wb... Se esiste viene cancellato, se non esiste viene creato
    Experience is what you get when you don’t get what you want

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288

    Moderazione

    Originariamente inviato da liberlux
    [c] due domandine
    Usa titoli più significativi, che diano un'idea del contenuto della discussione.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8

    stesso problema

    scusa se ti scrivo adesso...ma ho esattamente il tuo stesso problema! devo usare scanf e ho provato a fare tutto cio che c'è scritto ma non ha funzionato! tu alla fine come hai risolto? perchè la gets risolverebbe tutti i miei problemi ma purtroppo 1) mi viene sconsigliata 2) il prof a cui consegnerò la tesina non ne sarà tanto contento di sta cavolo di gets! HELPPPPPPPP!! èER FAVORE

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Ne stai già parlando qui. Dovevi per forza uppare una discussione di 4 anni fa?
    Comunque se proprio non ti piace la soluzione che ti hanno proposto con la scanf() e la gets() non la puoi usare (giustamente), esiste la benedetta fgets(), simile alla gets() ma generica e senza i suoi problemi di sicurezza.
    every day above ground is a good one

  10. #10
    Ne stai già parlando qui. Dovevi per forza uppare una discussione di 4 anni fa?
    Comunque se proprio non ti piace la soluzione che ti hanno proposto con la scanf() e la gets() non la puoi usare (giustamente), esiste la benedetta fgets(), simile alla gets() ma generica e senza i suoi problemi di sicurezza

    Scusami tanto ma nel googlare mi sono imbattuto in questo ragazzo che aveva il mio stesso problema e ho provato a chiederlo direttamente a lui.Qual'è il problema se chiedo in una discussione gia aperta come aveva risolto il problema??? non penso che uppare una discussione di 4 anni fa ti rechi disagio in qualche modo quindi sei libero tranquillamente di non rispondermi se non ti va! il problema non è che le soluzioni non mi piacciono ma bensi non funzionano purtroppo perchè ho provato e riprovato ma non vanno quindi ho provato a chiedere a questo ragazzo! grazie per la fgets() ma non penso che si distacchi molto dalla gets! grazie cmq per l'aiuto!

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.