Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24

Discussione: [C++]Output su file

  1. #1
    Utente di HTML.it L'avatar di Aki
    Registrato dal
    Dec 2002
    Messaggi
    2,206

    [C++]Output su file

    Ciao a tutti
    sto muovendo i miei primi passi nella programmazione C++ ed ho fatto una piccola rubrica da linea di comando (o meglio: dovrebbe essere una rubrica :master: )

    il codice è questo:
    codice:
    //
    // PRIMO.CPP
    // Il primo esempio in C++
    //
    
    #include <fstream>
    #include <iostream>
    
    using namespace std;
    
    int scrivi(char nom[], char cog[], char nck[],
    char via[],char tel[],char cel[],char mai[]) 
    {
    	ofstream pippo;
    	pippo.open("rubrica.ini",  ios::out);
    	char s[]="RUBRICA INDIRIZZI";
    	pippo << "Nome "<< nom << "\nCognome: " << cog << 
    "\nNickname: " << nck << "\nIndirizzo: " << via << 
    "\nTelefono: " << tel << "\nCellulare: " << cel <<
     "\nE-mail: " << mai << "\n";
    	system ("PAUSE");
    	return 0;
    }
    
    main()
    {
    	char nom[10];
    	char cog[10];
    	char nck[10];	
    	char via[10];
    	char tel[10];
    	char cel[10];
    	char mai[10];
    	cout << "Nome: "<<  endl;
    	cin >> nom;
    	cout << "Cognome: "<<  endl;
    	cin >> cog;
    	cout << "Nickname: "<<  endl;
    	cin >> nck;
    	cout << "Via: "<<  endl; 
    	cin >> via;
    	cout << "Telefono: "<<  endl;
    	cin >> tel;
    	cout << "Cellulare: "<<  endl;
    	cin >> cel;
    	cout << "E-mail: "<<  endl;
    	cin >> mai;
    	scrivi(nom, cog, nck, via, tel, cel, mai);
    	return (0);
    }
    cmq esegue correttamente ma con due problemini:
    1) un'eventuale nuovo inserimento non fà l'append nel file, ma lo sovrascrive cancellando il record precedente

    2) non posso inserire spazi quando in via ad esempio servirebbero (ad es. se scrivo Via Rossi 20 mi considera:
    Via: Via
    Telefono: Rossi
    Cellulare: 20)

    spero di essermi fatto capire bene

  2. #2
    Allora:

    1. invece di ios:ut devi usare ios::app per fare l'append.

    2. per il problema della via puoi fare in modo che se scrivo "via rossi 20" lo riconosca come un campo.

    ciao
    Gnix
    http://www.ptrace.net

  3. #3
    Utente di HTML.it L'avatar di Aki
    Registrato dal
    Dec 2002
    Messaggi
    2,206
    Originariamente inviato da Gnix
    Allora:

    1. invece di ios:ut devi usare ios::app per fare l'append.

    2. per il problema della via puoi fare in modo che se scrivo "via rossi 20" lo riconosca come un campo.

    ciao
    Gnix
    ok ma il punto 2 come glielo faccio riconoscere come campo?

  4. #4

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    x leggere anke gli spazi usa cin.getline()
    *********************************
    Andrea
    *********************************

  6. #6
    Utente di HTML.it L'avatar di Aki
    Registrato dal
    Dec 2002
    Messaggi
    2,206
    Originariamente inviato da Squall1988
    x leggere anke gli spazi usa cin.getline()
    però quando lo compilo dando (il file è jin.c) g++ d:\jin.c -o JIN, mi dà questo errore:
    codice:
    d:/jin.c: In function `int inserisci()':
    d:/jin.c:37: error: no matching function for call to 
    `std::basic_istream<char,
       std::char_traits<char> >::getline()'
    ../include/c++/3.3.1/bits/istream.tcc:664: 
    error: candidates are:
       std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
       _Traits>::getline(_CharT*, int, _CharT) 
    [with _CharT = char, _Traits =
       std::char_traits<char>]
    ../include/c++/3.3.1/istream:401: error:
       std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
       _Traits>::getline(_CharT*, int) [with _CharT = char, _Traits =
       std::char_traits<char>]
    la funzione incriminata è questa:
    codice:
    ...
    int inserisci()
    {
    	char nom[10];
    	char cog[10];
    	char nck[10];	
    	char via[10];
    	char tel[10];
    	char cel[10];
    	char mai[10];
    	cout << "Nome: ";
    	cin >> nom;
    	cout << "Cognome: ";
    	cin >> cog;
    	cout << "Nickname: ";
    	cin >> nck;
    	cout << "Via: "; 
    	cin.getline() >> via;
    	cout << "Telefono: ";
    	cin >> tel;
    	cout << "Cellulare: ";
    	cin >> cel;
    	cout << "E-mail: ";
    	cin >> mai;
    	scrivi(nom, cog, nck, via, tel, cel, mai);
    	return (0);
    }
    ...
    cos'è che non va?
    la riga in bold, col getline() che mi diceva Squall1988, è scritta giusta?

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    spe spe nn t ho detto i parametri :E



    cin.getline (stringa, lunghezza, terminatore)

    in genere la chiami con

    cin.getline (via, 20, '\n');
    *********************************
    Andrea
    *********************************

  8. #8
    Utente di HTML.it L'avatar di Aki
    Registrato dal
    Dec 2002
    Messaggi
    2,206
    si ma così mi toglie la prima parola:
    ovvero se nel programma scrivo
    ...
    Via: Via ABC 123
    ...

    nell'output su file scrive:
    ...
    Via: ABC 123
    ...

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    dopo ogni getline mettici

    cin.ignore (80, '\n')

    e vedi se va
    *********************************
    Andrea
    *********************************

  10. #10
    Utente di HTML.it L'avatar di Aki
    Registrato dal
    Dec 2002
    Messaggi
    2,206
    Originariamente inviato da Squall1988
    dopo ogni getline mettici

    cin.ignore (80, '\n')

    e vedi se va
    niente, uguale a prima

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.