2010-12-02 21 views
0

Le programme ci-dessous devrait lire dans un tas d'entiers à partir d'un fichier et travailler à leur moyenne:A défaut de lire les valeurs d'un fichier

#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"); 

} 

Le fichier mydata.txt existe dans le même répertoire et contient 1 2 3 4 5 mais la sortie est toujours: No list to average!

Qu'est-ce que je fais de mal qu'il saute toujours les pièces de calcul et de génération de fichiers de sortie?

Merci pour votre aide,

H

+1

Que voulez-vous même répertoire? Comme dans vos fichiers source? ou dans le même que l'exécutable construit ?? Cela fonctionne bien pour moi sous Linux. – Muggen

+1

Appelez 'fin.is_open()' pour voir si le fichier a été ouvert correctement. – detunized

Répondre

1

Je suppose que mydata.txt est pas dans le même répertoire que l'exécutable, le code fonctionne pour moi

2

Essayez de remplacer mydata.txt par le chemin absolu

4

Après avoir ouvert le fichier, ajoutez une instruction assert pour vous assurer que vous avez le bon chemin.

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

Si l'assertion échoue, vous savez que quelque chose ne va probablement pas dans votre chemin de fichier.

+0

Je préférerais voir cela comme une vérification d'erreur dans le code. Le fichier ouvert peut toujours échouer, et un bon code le traitera. –

+0

Oui, c'est un bon point. Le code C++ approprié doit toujours vérifier l'état d'un flux de fichier après l'ouverture d'un fichier, car aucune exception ne sera levée en cas d'erreur. –