Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

C++ getline, gets e input

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

0
voti

[1] C++ getline, gets e input

Messaggioda Foto Utenteicecube93 » 4 set 2011, 5:29

Salve a tutti!!
studio da un po' di tempo c++, e ora mi sono proprio bloccato, questo mi fa strani scherzi

Codice: Seleziona tutto
#include <iostream>
#include <string>
using namespace std;

void main()
{
   struct dipendente
   {
      char nome[30];
      char cognome[30];
      int eta;
      int stipendio;
   };

   int num, chi;
   struct dipendente  lista[100];

   cout<<"Quanti dipendenti ha l'azienda? ";cin>>num;


   for(int i=0; i<num; i++)
   {
      cout<<"\nInserisci il nome del dipendente num "<<i+1<<": ";cin.getline(lista[i].nome, 30, '\n');
      cout<<"\nInserisci il cognome: ";cin.getline(lista[i].cognome, '\n');
      cout<<"\nInserisci l'eta': ";cin>>lista[i].eta;
      cout<<"\nInserisci lo stipendio che percepisce: ";cin>>lista[i].stipendio;
   }

   cout<<"\n\nQuale dipendente vuoi vedere? ";cin>>chi;

   cout<<"\n\nNome: "<<lista[chi].nome;
   cout<<"\nCogmone: "<<lista[chi].cognome;
   cout<<"\nEta: "<<lista[chi].eta;
   cout<<"\nStipendio: "<<lista[chi].cognome;


   cout<<endl;
   system("pause");
}


allora quano lo faccio partire i chiede quanti dipendenti voglio inserire poi dovrebbe chiedermi il nome del dipendente ma non lo fa, mi scrive:
inserisci nome dipendente.....
inserisci il cognome:_

nel senso che scrive il cout del nome ma non me lo lascia inserire e passa subito al cognome e quello me lo lascia inserire, non riesco a capire quale si ail problema, ho fatto dei tentativi modificando cose "collegate" ma come mi aspettavo è stato tutto inutile

poi dato che non riuscivo a trovare il problema ho pensato di farmi un bel paragrafo sui vari tipi di input e output e com'è che va a finire... altri problemi #-o #-o

Codice: Seleziona tutto
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <string.h>
using namespace std;



int _tmain(int argc, _TCHAR* argv[])
{
   char agetchar;
   char agetch;
   char agetche;
   char agets[20];

   cout<<"inserisci qualcosa (getchar): ";agetchar= getchar();
   cout<<endl<<agetchar;

   cout<<"\ninserisci un'altra cosa(getch): "; agetch= getch();
   cout<<endl<<agetch;

   cout<<"\ninserisci un'altra cosa ancora(getche): ";agetche=getche();
   cout<<endl<<agetche;

   cout<<"\ninserisci una piccola frase(gets): ";cin>>agets;
   gets(agets);
   cout<<endl<<agets<<endl;
   cout<<"la frase che hai inserito e' lunga "<<strlen(agets)<<endl<<endl;


   cout<<endl<<endl;
   system("pause");
   return 0;
}



stavolta è il gets a creare problemi, non mi lascia inserire niente :shock: :shock: e dopo controllando la lungezza dice che è zero

c'è qualcuno che potrebbe darmi una mano?? [-o< [-o<
Avatar utente
Foto Utenteicecube93
0 2
New entry
New entry
 
Messaggi: 66
Iscritto il: 25 mag 2009, 21:23

0
voti

[2] Re: C++ getline, gets e input

Messaggioda Foto Utentesimo85 » 4 set 2011, 5:55

È parecchio che non tocco più il C++, ma così a bruciapelo vedo delle cose che io cambierei:

Il programma deve sempre ritornare un valore al sistema operativo, quindi la main deve essere dichiarata di tipo int e una return 0; alla fine del programma non guasta.
Le strutture le ho sempre viste dichiarate fuori dal main, io farei altrettanto.
Non usare la gets, it's deprecated. Usa la fgets.
Per un debugging on the road, la perror ti può tornare utile.
Infine, la chiamata system("pause") mi ha sempre fatto male agli occhi. Usare la system implica al programma ad appoggiarsi ad un' altro "esterno" (in questo caso pause) che non sai come si può comportare e quali effetti può provocare al tuo programma (i.e. potrebbe andare in crash). È una bruttissima abitudine usarla, in questo caso puoi usare una getchar al suo posto.

Ora non sono sul mio computer, appena posso dal mio laptop, se non avrai risolto, cercerò di darti una mano.
O_/
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[3] Re: C++ getline, gets e input

Messaggioda Foto Utentesimo85 » 4 set 2011, 8:44

Gli ho dato una occhiata ed una prova veloce. È il classico problema del buffer di input che rimane "sporco".
Quando tu inserisci num, nel buffer vi rimane il carattere '\n', per quello salta e non ti permette di inserire il nome del dipendente.
In questo ed altrettanto [url=http://augustcouncil.com/~tgibson/tutorial/iotips.html]questo] articolo ci sono informazioni che possono esserti di aiuto.
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[4] Re: C++ getline, gets e input

Messaggioda Foto Utenteicecube93 » 4 set 2011, 16:04

come avrai capito sono ancora gli inizi, ti ringrazio per la risposta mi è stata molto di aiuto, riguardo al programma ho risolto aggiungendo cin.ignore...
finalmente potrò andare avanti :mrgreen: :mrgreen: :lol: :lol:
non preoccuparti presto mi farò risentire :lol: :lol:
Avatar utente
Foto Utenteicecube93
0 2
New entry
New entry
 
Messaggi: 66
Iscritto il: 25 mag 2009, 21:23


Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 30 ospiti