|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2006
Messaggi: 112
|
[C++] Inserire spazi nelle stringhe senza che salti al cin successivo
Buonasera.
Vorrei sapere se esiste un metodo per inserire spazi nelle stringhe senza che crashi il programma. Esempio. char nome[20]; cin >> nome; Se inserisco come input "Giacomo Rossi", spazio incluso, si impalla il programma. Non voglio eliminare gli spazi, bensì salvarli all'interno della stringa (anche perchè dopo andranno scritti su file). Accettasi consigli, sono disperato! |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
|
Quote:
In questo caso Codice:
cin.getline(nome, 20);
__________________
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization. --Gerald Weinberg |
|
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
eh...? semmai volevi dire questo:
Codice:
string line; getline(cin, line); |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Oct 2006
Messaggi: 112
|
Ti ringrazio funziona su programmi semplici, ma non nel nostro.
Sono in un programma complesso, in cui stiamo definendo delle set. Ti copio il codice: Questo nel cpp. Codice:
#include <iostream>
#include <stdlib.h>
using namespace std;
#include "Soci.h"
void Soci::setNome(){
cout << "Inserire nome: "<<endl;
cin.getline(nome, 20);
cout << endl;
}
Codice:
#include <iostream>
#ifndef Soci
class Soci {
public:
unsigned int ID;
char nome[20];
char cognome[30];
char indirizzo[30];
int nascitaG;
int nascitaM;
int nascitaA;
char telefono[15];
char codiceFiscale[16];
int scadenzaG;
int scadenzaM;
int scadenzaA;
char sesso;
public:
void setNome();
void setCognome();
void setIndirizzo();
void setNascita();
void setTelefono();
void setCodiceFiscale();
void setScadenza();
void setSesso();
Soci();
};
#endif
Codice:
void operazioniSoci::inserimento(){
ofstream filesoci("file_soci.dat",ios::app|ios::binary);
Soci socio;
socio.setNome();
socio.setCognome();
socio.setIndirizzo();
socio.setNascita();
socio.setTelefono();
socio.setCodiceFiscale();
socio.setScadenza();
socio.setSesso();
filesoci.write(reinterpret_cast <const char*> (&socio), sizeof(socio));
filesoci.close();
}
Codice:
operazioniSoci a; a.inserimento(); |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Oct 2006
Messaggi: 112
|
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Oct 2006
Messaggi: 112
|
Antonio infatti funziona la cin.getline, ma solo in programmi semplici.
Nel mio programma (postato sopra) non funge... |
|
|
|
|
|
#7 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
si che va bene, proprio quella suggerivo infatti; tu invece suggerivi istream::getline, che anziché in un oggetto string mette i caratteri in un buffer di dimensione prefissata (tipica stronzata da C).
Quote:
(a parte che casomai sarebbero 19 visto che 20 è la dimensione del buffer) |
|
|
|
|
|
|
#8 | ||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Quote:
|
||
|
|
|
|
|
#9 | |||
|
Senior Member
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
|
Quote:
Lui usa un char[20], quindi gli ho suggerito quella forma. Ovviamente se vuole usare string userà la forma che hai suggerito. Quote:
Comunque non è 19 ma 20, lo spazio per il terminatore è automaticamente sottratto. Quote:
__________________
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization. --Gerald Weinberg |
|||
|
|
|
|
|
#10 | ||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Quote:
|
||
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
|
Basta segnalarlo, se l'utente poi ne inserisce di più sarà il metodo stesso a scartarli
Quote:
Se ha un char[20] sa gia che di caratteri in fondo ne prenderà 19, quello che conta è che il numero che passa non deve essere il numero di caratteri bensì l'ampiezza del buffer, terminatore incluso. Questo va oltre il concetto che sia malsano usare un char* per questo scopo in un programma medio in C++, ma non toglie che spesso negli esercizi o nei compiti universitari è richiesto esplicitamente di usarli.
__________________
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization. --Gerald Weinberg |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:24.




















