Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[C++]Problema Output su file

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[C++]Problema Output su file

Messaggioda BassMan92 » gio dic 29, 2011 9:57 pm

Salve..il testo dell'esercizio cita:

2) Scrivere un programma principale che legge una sequenza di numeri interi da un file, il cui
nome è dato in input dall'utente, e memorizza in due file distinti i numeri positivi e quelli
negativi letti, eliminando quelli uguali a 0. I nomi dei due file di output sono ottenuti
concatenando, rispettivamente, le stringhe "_pos" e "_neg" al nome del file di input (ad
esempio: "dati" diventa "dati_pos"). Il programma stampa su standard output anche il
numero di 0 eliminati.
ESEMPIO ESECUZIONE (input sottolineato)
File di input:
dati: 1 3 -2 4 0 -3 0 0 4 4 -5
Interazione con utente:
Dai nome del file di input: dati
Lettura file terminata correttamente
Numero di zeri eliminati: 3
File di output:

dati.pos: 1 3 4 4 4
dati.neg: -2 -3 -5


Questo è quello che ho fatto:

Codice: Seleziona tutto
#include <iostream>
#include <fstream>
#include <cstring>

const int MAX = 20;

using namespace std;

int main()
{
    ifstream txt;

    char nome[MAX], n[MAX], nn[MAX], np[MAX];
    int A[MAX];
    int x, i, s, y, zeri, let, lett;

    cout << "Nome file: ";
    cin.getline(nome, MAX);

    strcpy(n, nome);
    strcat(n, ".txt");

    cout << n;

    txt.open(n);

    if (txt.fail())
    {
        cout << "Errore apertura file!" << endl;
        system("pause");
        system("cls");
        return 0;
    }
    else
    {
        cout << "\nLettura file terminata correttamente..." << endl;
        _sleep(750);
        system("cls");
        strcpy(nn, nome);
        strcat(nn, "_neg.txt");
        strcpy(np, nome);
        strcat(np, "_pos.txt");
        ofstream neg, pos;
        neg.open(nn);
        pos.open(np);

        zeri = 0;

        do{
            txt >> x;
            if (!txt.fail())
            {
                if (x < 0)
                {
                    neg.put(x);
                    cout << x << endl;
                }
                else if(x > 0)
                {
                    pos.put(x);
                    cout << x << endl;
                    pos.close();
                }
                else if(x == 0)
                {
                    zeri++;
                    cout << "Vale 0" << endl;
                }
            }
            else break;
        }while(!txt.eof());

        neg.close();
        pos.close();
    }

    cout << "\nNumero di zeri eliminati: " << zeri << endl;
    cout << endl;
    system("pause");

    txt.close();

    return 0;
}


Ma sui miei file appare scritto:

dati.neg: þýû
dati.pos: quadrati

E' un problema di codifica o c'e un errore nell'algoritmo di lettura/scrittura?
Avatar utente
BassMan92
Aficionado
Aficionado
 
Messaggi: 44
Iscritto il: mer nov 17, 2010 1:46 pm

Re: [C++]Problema Output su file

Messaggioda BassMan92 » mer gen 04, 2012 6:50 pm

UP
Avatar utente
BassMan92
Aficionado
Aficionado
 
Messaggi: 44
Iscritto il: mer nov 17, 2010 1:46 pm

Re: [C++]Problema Output su file

Messaggioda M@ttia » mer gen 04, 2012 11:12 pm

Al di là del pos.close(); nel ciclo do...while che non so cosa ci faccia lì, in questo caso eviterei l'uso del put (che serve per l'unformatted output e ti crea i problemi sopra) e utilizzerei invece l'operatore << (che vale non solo per scrivere cose sulla console! Lavora inoltre con formatted output evitandoci grane...).

Il codice lo devi quindi modificare, sostituendo il ciclo do...while con:

Codice: Seleziona tutto
        do{
            txt >> x;
            if (!txt.fail())
            {
                if (x < 0)
                {
                    neg  << x << endl;
                    cout << x << endl;
                }
                else if(x > 0)
                {
                    pos  << x << endl;
                    cout << x << endl;
                }
                else if(x == 0)
                {
                    zeri++;
                    cout << "Vale 0" << endl;
                }
            }
            else break;
        }while(!txt.eof());
</IE><FIREFOX>
Avatar utente
M@ttia
Moderatore
Moderatore
 
Messaggi: 8363
Iscritto il: lun giu 09, 2003 2:18 pm
Località: Ticino - Estero

Re: [C++]Problema Output su file

Messaggioda BassMan92 » sab gen 07, 2012 4:16 pm

grazie :)
Avatar utente
BassMan92
Aficionado
Aficionado
 
Messaggi: 44
Iscritto il: mer nov 17, 2010 1:46 pm


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti

cron
Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising