Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C++] ma perche ??

    ciao ragazzi il mio quesito è il seguente :

    premetto che non sono molto pretico di C++ ma stò provando ad avvicinarmici...e nel fare un piccolo programmino mi scontro con una cossa assurda :

    codice:
    #include <iostream>
    #include <string>
    #include <stdio.h>
    
    using namespace std;
    
    /**
     * dichiarazione prototipi di funzione
     **/
    
    int menu();
    void nuovaNota();
    
    /* MAIN */
    int main()
    { 
       int s;
       s=menu();
       switch(s)
         {
          case 1 : 
    	nuovaNota();
    	break;
          case 2 :
    	break;
         }
       return 0;
    }
    
    /**
     * Funzione MENU() 
     **/
    
    int menu()
    {
       int sel;
       cout<<"                  DIARIO"<<endl;
       cout<<"-----------------------------------------------";
       cout<<endl;
       cout<<" 1 --> Nuova nota "<<endl;
       cout<<" 2 --> Esci "<<endl;
       cout<<endl;
       cout<<" -:> ";
       cin>>sel;
       return sel;
    }
    
    /**
     * Funzione nuovaNota()
     **/
    
    void nuovaNota()
    {
       const int nChar = 99; 
       char str[nChar+1];
       cout<<"Nuova Nota";
       cout<<endl;
       /* perchè devo metterci il getchar() perima del cin.getline() ??? */
       getchar();
       cin.getline(str,nChar);
       cout<<str;   
    }
    questo è il codice. Come si vede dai commenti, il mio dilemma è quel getchar() nella funzione nuovaNota(), che se non metto, quando poi eseguo il programma, di fatto non mi fa fare l'input del cin.getline(). il programma di fatto termina senza errori ma non mi fa scrivere nulla.

    qualche idea ??
    |Slackware
    |-------LINUX 10

  2. #2
    Dipende dal precedente inserimento che non viene "ripulito" dal buffer, credo. Non so dirti di piu', purtroppo...
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  3. #3
    ok, era l'idea che avevo anch'io, il fatto è che non sò come svuotarlo il buffer.
    |Slackware
    |-------LINUX 10

  4. #4
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    ma nn ti è più semplice usare cin e cout?
    codice:
    void nuovaNota()
    {
       const int nChar = 99; 
       char str[nChar+1];
       cout<<"Nuova Nota";
       cout<<endl;
       cin >> str;
       cout<<str;   
    }
    dovrebbe funzionare

  5. #5
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Quel getchar praticamente "assorbe" i caratteri dal buffer di prima, se non lo metti verranno presi dalla funzione di input che penserà siano i dati inseriti dall'utente tramite tastiera.

    per pulire potresti fare

    fflush(stdin)

    o

    fflush(stdout)

    non ricordo se da pulire è l'input o l'outpu.

    Inoltre visto che sei su C++ e stai pure usando l'header string di std potresti anche usare la classe string:

    codice:
    ...
    string str;
    cin >> str;
    ...
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  6. #6
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    se usi microsoft visual c++ la getline aveva un bug; fflush funziona, sebbene non è previsto dallo standard che debba svuotare lo stream di input.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  7. #7
    Utente di HTML.it L'avatar di MMarzia
    Registrato dal
    Mar 2001
    Messaggi
    1,781
    la prossima volta utilizza un titolo più significativo..
    io sono festosamente cicciottello :: e. cartman

    t'amo senza sapere come, nè quando nè da dove,
    t'amo direttamente senza problemi nè orgoglio:
    così ti amo perchè non so amare altrimenti

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.