Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    5

    [C++]perchè mi salta un'istruzione?

    ciao a tutti!
    allora io ha scritto queste righe di codice:

    #include <iostream.h>
    #include <string.h>


    typedef char stringa[30];

    struct abbonati{
    char* nominativo;
    stringa indirizzo;
    stringa num_tel;

    };

    int main()
    {
    abbonati* p= new abbonati;
    char nome[50];

    cout<<"Inserisci il nome dell'abbonato\n";

    cin.get(nome,50);
    p->nominativo=new char [strlen(nome)+1];
    strcpy(p->nominativo, nome);

    cout<<"Inserisci l'indirizzo dell'abbonato:\n";
    gets(p->indirizzo);

    cout<<"Inserisci il numero di telefono dell'abbonato:\n";
    gets(p->num_tel);

    cout<<"L'utente appena registrato e':\n"
    <<"Nome:\t"<<p->nominativo<<"\n"
    <<"Indirizzo\t"<<p->indirizzo<<"\n"
    <<"Numero di telefono:\t"<<p->num_tel<<endl;

    system("pause");
    return 0;
    }

    Non mi da errori, solo che nella finestra di output mi salta il gets(p->indirizzo) nel senso che mi chiede "Inserisci indirizzo" e poi subito salta a "inserisci numero telefonico".
    Perchè? cosa ho sbagliato?

    mi sono appena accorta che se invece faccio cosi:

    typedef char stringa[30];

    struct abbonati{
    stringa nominativo;
    stringa indirizzo;
    stringa num_tel;

    };

    int main()
    {
    abbonati* p= new abbonati;

    cout<<"Inserisci il nome dell'abbonato\n";
    gets(p->nominativo);

    cout<<"Inserisci l'indirizzo dell'abbonato:\n";
    gets(p->indirizzo);

    cout<<"Inserisci il numero di telefono dell'abbonato:\n";
    gets(p->num_tel);

    cout<<"L'utente appena registrato e':\n"
    <<"Nome:\t"<<p->nominativo<<"\n"
    <<"Indirizzo\t"<<p->indirizzo<<"\n"
    <<"Numero di telefono:\t"<<p->num_tel<<endl;

    system("pause");
    return 0;
    }
    va una meraviglia!solo che l'esercizio chiede esplicitamente di allocare dinamicamente anche la stringa nominativo.

    Grazie a tutti
    Nereide

  2. #2
    prova a pulire il buffer dello stream... utilizzando fflush(stdin); prima di ogni gets...

    fammi sapere

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    5
    funziona!!!!!!!!!!!!!
    grazie mille!

    ma qual'è la differenza nell'usare il gets() o il cin.get()? xkè con gets mi va una bellezza invece con cin.get per farlo funzionare come si deve (senza svuotare buffer come mi hai detto tu) ho dovuto fare:

    cin.get(nome,50,'\n');
    while ( cin.get()!='\n' );
    p->nominativo=new char [strlen(nome)+1];
    strcpy(p->nominativo, nome);


    ti ringrazio ancora
    Nereide

  4. #4
    gets prende una intera stringa dallo stdin...
    mentre se ricordo bene cin-get, prende un solo carattere per volta...

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

    Moderazione

    Chiudo suggerendo all'autore della discussione di specificare il linguaggio nel titolo e di usare descrizioni più significative, come indicato nel Regolamento.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

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.