Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - utilizzare cin.get o cin.getline?
Forum - C/C++ - utilizzare cin.get o cin.getline?

Avatar
Postese15 (Normal User)
Newbie


Messaggi: 3
Iscritto: 05/02/2011

Segnala al moderatore
Postato alle 12:07
Sabato, 05/02/2011
ciao a tutti ragazzi questo è la mia prima discussione.
passiamo al problema...devo fare un programma che utilizza degli struct però nel campo nome non riesco a inserire parole separate da uno spazio...potete aiutarmi?
vi posto il file sorgente scritto da me.
Codice sorgente - presumibilmente C++

  1. struct Azienda{
  2. char cognome[32];
  3. char nome[32];
  4. char reparto[4];
  5. int anno;
  6. int matricola;
  7. };
  8. #include <cstdlib>
  9. #include <iostream>
  10. #include "modulo.h"
  11. using namespace std;
  12.  
  13. void leggi(int n,Azienda s[]);
  14. void nuovo(int n,Azienda s[],Azienda s1[],int copy,int a1,int a2,int& cont);
  15. void ordina(int copy,Azienda s1[]);
  16. void stampa(int copy,Azienda s[]);
  17.  
  18. /*
  19. *
  20. */
  21. int main(int argc, char** argv) {
  22. int n,a1,a2,copy,cont;
  23. Azienda* s;
  24. Azienda* s1;
  25. cout<<"inserire numero di dipendenti: ";
  26. cin>>n;
  27. s=new Azienda[n];
  28. if(s==NULL){
  29.     cout<<"ERRORE";
  30.     return -1;
  31. }
  32. leggi(n,s);
  33. cout<<"inserire primo anno: ";cin>>a1;
  34. cout<<"inserire secondo anno: ";cin>>a2;
  35. s1=new Azienda[n];
  36. if(s1==NULL){
  37.     cout<<"ERRORE";
  38.     return -1;
  39. }
  40. nuovo(n,s,s1,copy,a1,a2,cont);
  41. ordina(cont,s1);
  42. stampa(cont,s1);
  43. delete []s;
  44. delete []s1;
  45. return 0;
  46. }
  47.  
  48. void leggi(int n,Azienda s[]){
  49. for(int i=0;i<n;i++){
  50. cout<<"dipendente"<<i+1<<": ";
  51. cout<<"\ninserire cognome: ";cin>>s[i].cognome;
  52. cout<<"inserire nome: ";cin>>s[i].nome;
  53. cout<<"inserire reparto(amm,prd,ric,mrk): ";cin>>s[i].reparto;
  54. cout<<"inserire anno assunzione: ";cin>>s[i].anno;
  55. cout<<"inserire matricola: ";cin>>s[i].matricola;
  56. }
  57. }
  58. void nuovo(int n,Azienda s[],Azienda s1[],int copy,int a1,int a2,int& cont){
  59. copy=0;
  60. cont=0;
  61. for(int i=0;i<n;i++)
  62. if(s[i].anno>a1 && s[i].anno<a2){
  63. s1[copy]=s[i];
  64. copy++;
  65. cont++;
  66. }
  67. }
  68. void ordina(int copy,Azienda s1[]){
  69. for(int t=0;t<copy;t++)
  70. for(int i=copy-1;i>t;i--)
  71. if(s1[i].matricola<s1[i-1].matricola)
  72. swap(s1[i].matricola, s1[i-1].matricola);
  73. }
  74. void stampa(int copy,Azienda s[]){
  75. for(int i=0;i<copy;i++){
  76. cout<<"\ndipendente"<<i+1<<":\n "<<s[i].cognome[0]<<s[i].nome[0]<<"\n";
  77. cout<<"reparto: "<<s[i].reparto<<"\n";
  78. cout<<"anno di assunzione: "<<s[i].anno;
  79. cout<<"\nmatricola: "<<s[i].matricola<<"\n";
  80. }
  81. }


Ultima modifica effettuata da Postese15 il 05/02/2011 alle 12:09
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 12:59
Sabato, 05/02/2011
per chiedere parole con lo spazio devi per forza ricorrere a getline :)

PM Quote
Avatar
Postese15 (Normal User)
Newbie


Messaggi: 3
Iscritto: 05/02/2011

Segnala al moderatore
Postato alle 13:23
Sabato, 05/02/2011
però se imposto un valore,ad esempio 20,fino a quando non inserisco vendi caratterie/o spazi non mi funziona

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 13:48
Sabato, 05/02/2011
Testo quotato

Postato originariamente da Postese15:

però se imposto un valore,ad esempio 20,fino a quando non inserisco vendi caratterie/o spazi non mi funziona



il terminatore a quel punto diventa il ritorno a capo :)

PM Quote
Avatar
Postese15 (Normal User)
Newbie


Messaggi: 3
Iscritto: 05/02/2011

Segnala al moderatore
Postato alle 11:41
Domenica, 06/02/2011
ho provato ma non mi funziona perchè mi salta l inserimento del campo successivo...come potrei fare? grazie in anticipo:)

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 11:47
Domenica, 06/02/2011
metti un cin.ignore appena prima dell'input successivo, per far si che si pulisca il buffer di tastiera...

PM Quote