Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it L'avatar di torejx
    Registrato dal
    May 2005
    Messaggi
    301

    [C] leggere un valore di tipo enum

    Ciao ragazzi sono un novello del C... ho un programma dove ho un tipo enum
    codice:
    typedef enum Bibita {coca, fanta, birra}
    e una variabile
    codice:
    Bibita bibita
    quando vado a leggere il valore inserito dall'utente
    codice:
    scanf("%s", bibita)
    durante l'esecuzione mi dà errore di segmentazione... penso che l'errore sia nello scanf (dato che non ricordo il formato con cui devo leggerlo) visto che se assegno alla variabile bibita un valore costante il prog funziona... Chi può aiutarmi?
    io: "cosa vorresti fare da grande?"
    bambino di sei anni: "il coglione"
    io: "come mai?"
    bambino di sei anni: "perchè ogni volta che passa uno con una bella auto papà dice <<guarda quel coglione che bella macchina che c'ha>>"

  2. #2

    Re: [C] leggere un valore di tipo enum

    Gli enum sono solo raggruppamenti di nomi descrittivi per delle costanti, e vengono trattati dal compilatore come dei semplici interi, per cui non esiste un modo per fare sì che l'utente inserisca "coca" ed automaticamente la scanf imposti correttamente la variabile bibita; devi memorizzare la stringa inserita dall'utente in una stringa e determinare quale valore dell'enum è stato scelto con una serie di if e di strcmp.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di torejx
    Registrato dal
    May 2005
    Messaggi
    301

    Re: Re: [C] leggere un valore di tipo enum

    Originariamente inviato da MItaly
    Gli enum sono solo raggruppamenti di nomi descrittivi per delle costanti, e vengono trattati dal compilatore come dei semplici interi, per cui non esiste un modo per fare sì che l'utente inserisca "coca" ed automaticamente la scanf imposti correttamente la variabile bibita; devi memorizzare la stringa inserita dall'utente in una stringa e determinare quale valore dell'enum è stato scelto con una serie di if e di strcmp.
    potresti farmi un esempio? ps non cambia nulla se all'utente chiedo di inserire un intero? per esempio "inserisci 0 per coca"?
    io: "cosa vorresti fare da grande?"
    bambino di sei anni: "il coglione"
    io: "come mai?"
    bambino di sei anni: "perchè ogni volta che passa uno con una bella auto papà dice <<guarda quel coglione che bella macchina che c'ha>>"

  4. #4

    Re: Re: Re: [C] leggere un valore di tipo enum

    Originariamente inviato da torejx
    potresti farmi un esempio?
    codice:
    #include <string.h>
    /* ... */
    Bibita bibita;
    char buffer[1024];
    scanf("%1023s",buffer); /*evitiamo i buffer overrun, per quanto improbabili */
    strlwr(buffer);
    if (!strcmp(buffer,"coca"))
        bibita=coca;
    else if (!strcmp(buffer,"fanta"))
        bibita=fanta;
    else if (!strcmp(buffer,"birra"))
        bibita=birra;
    ps non cambia nulla se all'utente chiedo di inserire un intero? per esempio "inserisci 0 per coca"?
    Be', questo semplifica molto le cose:
    codice:
    Bibita bibita;
    printf("Inserisci %d per coca, %d per fanta, %d per birra.",coca,fanta,birra);
    scanf("%d",&bibita);
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di torejx
    Registrato dal
    May 2005
    Messaggi
    301
    grazie mille 6 davvero gentile... penso che la seconda sia molto + semplice e immediata... io avevo provato a inserire un numero ma credo che nella scanf abbia usato &bibita invece che bibita e quindi continuava a dare errore... grazie ancora
    io: "cosa vorresti fare da grande?"
    bambino di sei anni: "il coglione"
    io: "come mai?"
    bambino di sei anni: "perchè ogni volta che passa uno con una bella auto papà dice <<guarda quel coglione che bella macchina che c'ha>>"

  6. #6
    Ma... in realtà bisogna effettivamente scrivere &bibita, sono io che me ne sono dimenticato (correggo subito)...
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it L'avatar di torejx
    Registrato dal
    May 2005
    Messaggi
    301
    Originariamente inviato da MItaly
    Ma... in realtà bisogna effettivamente scrivere &bibita, sono io che me ne sono dimenticato (correggo subito)...
    azz.. allora perchè mi dava errore? qui non ho il codice..stasera torno a casa controllo e ti faccio sapere...
    io: "cosa vorresti fare da grande?"
    bambino di sei anni: "il coglione"
    io: "come mai?"
    bambino di sei anni: "perchè ogni volta che passa uno con una bella auto papà dice <<guarda quel coglione che bella macchina che c'ha>>"

  8. #8
    Scusate...
    Ma io ho sempre letto un int o un unsigned e poi ho fatto un casting:

    bibita = (Bibita) valoreLettto;

    Mi sembra che un enum non possa essere letto da tastiera :master:
    Experience is what you get when you don’t get what you want

  9. #9
    Utente di HTML.it L'avatar di torejx
    Registrato dal
    May 2005
    Messaggi
    301
    Originariamente inviato da Xaratroom
    Scusate...
    Ma io ho sempre letto un int o un unsigned e poi ho fatto un casting:

    bibita = (Bibita) valoreLettto;

    Mi sembra che un enum non possa essere letto da tastiera :master:
    giusto... comunque proverò stasera e vi farò sapere...
    io: "cosa vorresti fare da grande?"
    bambino di sei anni: "il coglione"
    io: "come mai?"
    bambino di sei anni: "perchè ogni volta che passa uno con una bella auto papà dice <<guarda quel coglione che bella macchina che c'ha>>"

  10. #10
    Originariamente inviato da Xaratroom
    Scusate...
    Ma io ho sempre letto un int o un unsigned e poi ho fatto un casting:

    bibita = (Bibita) valoreLettto;

    Mi sembra che un enum non possa essere letto da tastiera :master:
    Un enum è un int.
    Amaro C++, il gusto pieno dell'undefined behavior.

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