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?