C++ problemi input

di il
5 risposte

C++ problemi input

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

#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


#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 e dopo controllando la lungezza dice che è zero

c'è qualcuno che potrebbe darmi una mano??

5 Risposte

  • Re: C++ problemi input

    Per quanto riguarda il tuo primo programma postato, devi sostituire:
    cin.getline(lista[i].nome, 30, '\n');
    con:
    cin>>lista[i].nome;
    e:
    cin.getline(lista[i].cognome, '\n');
    con:
    cin>>lista[i].cognome;
    Inoltre avevi scritto cognome invece di stipendio nella:
    cout<<"\nStipendio: "<<lista[chi].stipendio;
    Matteo
  • Re: C++ problemi input

    matteo.1 ha scritto:


    Per quanto riguarda il tuo primo programma postato, devi sostituire:
    cin.getline(lista[i].nome, 30, '\n');
    con:
    cin>>lista[i].nome;
    e:
    cin.getline(lista[i].cognome, '\n');
    con:
    cin>>lista[i].cognome;
    Inoltre avevi scritto cognome invece di stipendio nella:
    cout<<"\nStipendio: "<<lista[chi].stipendio;
    Matteo
    E se il nome e/o il cognome fosse composto da pià stringhe tipo: (Maria Maddalena Cognomemadre CognomePadre)? Il tuo suggerimento fallirebbe.

    Infatti lui con getline la risolve bennissimo. Un altro suggerimento è quello di usare le std::string invece che char *.
    Il problema da lui riscontrato capita perche sull'input ci sono ancora dei dati non presi (vedi '\n').

    Il tutto si risolve con:
    
    cin.ignore(numero abbastanza grande,'\n');
    
    Il secondo esempio non lo guardo neanche perche è un miscuglio tra C e C++ che non consiglerei a nessuno. O usi il C o usi il C++.
  • Re: C++ problemi input

    Innanzitutto vi ringrazio per le risposte!!


    io normalmente usavo cin per l'input, ho optato per il getline proprio perchè spesso si hanno più nomi o comunque capita che in input ci sia una frase...

    non ho capito bene, come funziona cin.ignore, da quello che ho capito fa in modo di ignorare i buffer e dopo la virgola come secondo parametro gli devo dare i caratteri da ignorare ma perchè devo inserire un numero molto grande

    riguardo al secondo programma, è fatto così perchè sto seguendo un libro e dice che per capire bene gli input in C++ biosogna capirli bene in C, e dato che con i compilatori C++ si può usare il C (io uso Visual C++, con visual studio) ho pensato che mi poteva fare bene...
  • Re: C++ problemi input

    Un numero grande significa 100 per stare dentro. il ignore scarta o fino a 100 caratteri se non trova il deliminatore (nel nostro caso il '\n') oppure scarta finche trova il deliminatore, in ogni caso quel che arriva prima.

    Il programmi o li fai in C o li fai in C++. gets su cin non ha senso usarlo anche perche gets non dovrebbe funzionare sugli stream quali cin.
  • Re: C++ problemi input

    Non ci avevo pensato al caso dei nomi doppi.

    Matteo
Devi accedere o registrarti per scrivere nel forum
5 risposte