2010-12-02 16 views
0

Das folgende Programm sollte in einer Gruppe von ganzen Zahlen aus einer Datei lesen und herauszufinden, ihren Durchschnitt zu lesen:Failing Werte aus einer Datei

#include "stdafx.h" 
#include <iostream> 
#include <string> 
#include <fstream> 
using namespace std; 

int main(int argc, char** argv) 
{ 
    ifstream fin("mydata.txt"); 
    int i, value, sum = 0; 

    for (i = 0; fin >> value; i++) 
    { 
     sum += value; 
    } 

    if (i > 0) 
    { 
     ofstream fout("average.txt"); 
     fout << "Average: " << (sum/i) << endl; 
    } 
    else 
    { 
     cerr << "No list to average!" << endl; 
    } 

system("PAUSE"); 

} 

Die Datei mydata.txt existiert im selben Verzeichnis und enthält 1 2 3 4 5 aber die Ausgabe ist immer: No list to average!

Was mache ich falsch, dass es immer überspringt die Berechnung und Ausgabedatei Generierung Teile?

Danke für Ihre Hilfe,

H

+1

Was Sie Verzeichnis bedeuten? Wie in Ihren Quelldateien? oder in der gleichen wie die gebaute ausführbare Datei ?? Es funktioniert gut für mich in Linux. – Muggen

+1

Rufen Sie 'fin.is_open()' auf, um zu sehen, ob die Datei ordnungsgemäß geöffnet wurde. – detunized

Antwort

1

i mydata.txt erraten ist nicht im selben Verzeichnis wie die ausführbare Datei, die Code funktioniert für mich

2

Versuchen mydata.txt mit dem absoluten Pfad zu ersetzen

4

Nachdem Sie die Datei öffnen, eine assert Anweisung hinzufügen, dass Sie den Pfad korrekt haben zu machen.

ifstream fin("mydata.txt"); 
assert(fin.good()); 

Wenn die Behauptung fehlschlägt, Sie etwas wissen werden, ist mit dem Dateipfad wahrscheinlich falsch.

+0

Ich würde es vorziehen, dies als eine Fehlerprüfung im Code zu sehen. Datei öffnen kann immer fehlschlagen, und guter Code würde damit umgehen. –

+0

Ja, das ist ein guter Punkt. Korrekter C++ - Code sollte immer den Zustand eines Dateistroms nach dem Öffnen einer Datei überprüfen, da keine Ausnahme ausgelöst wird, wenn ein Fehler auftritt. –