2014-12-06 4 views
-2

Привет, мой профессор опубликовал этот пример на своем веб-сайте, где приведен пример ifstreams, почему я не могу открыть любой .txt-файл?Файл не открыт для ifstream

#include <iostream> 
#include <iomanip> // for setw 
#include <fstream> // for ifstream, ofstream 

using namespace std; 

int main() 
{ 
    char filename[25];  // a string for filename entry 

    int val;  // for reading integers from file 
    int sum = 0, count = 0;  
    double average; 

    ifstream in1;  // create an input file stream 

    do 
    { 
     in1.clear(); 
     cout << "Please enter the name of the input file.\n"; 
     cout << "Filename: "; 
     cin >> setw(25) >> filename; 

     in1.open(filename); 
     if (!in1) 
     cout << "That is not a valid file. Try again!\n"; 

    } while (!in1); 

    // PROCESS THE INPUT FILE 
    // Read all integer values and compute average 

    while (!in1.eof())  // while not end of file 
    { 
     in1 >> val;  // read an integer from file 

     if (!in1.fail())  // in case last call failed to read an int 
     {    // due to trailing white space at end of file 
    count++; 
     sum += val; 
     } 
    } 

    average = static_cast<double>(sum)/count; 

    cout << "There were " << count << " numbers in the file\n"; 
    cout << "Sum = " << sum << "\t\tAverage = " << average << "\n\n"; 

    in1.close(); 

    return 0; 
} 

Это чрезвычайно усугубляет ситуацию! Это проблема с моим компьютером или чем-то еще?

Blockquote

+0

Добро пожаловать в переполнение стека! Нам нужна дополнительная информация, чтобы помочь вам - что именно происходит при запуске этого кода? – Kelm

+0

Вы пытались с абсолютным путем? – Borgleader

+0

Когда я запускаю код, он предлагает мне ввести имя файла, однако он сообщает мне, что он никогда не может найти файл, который я вводил. – Demomomo

ответ

2

Позвольте мне сделать два предположения: вы используете некоторые IDE, и вы используете относительные пути.

IDE часто выполняют ваш двоичный файл из каталога, отличного от основного каталога проекта. Попробуйте использовать абсолютные пути, найдите нужный каталог или запустите файл самостоятельно.

+0

Я попытался использовать абсолютный путь, и он все еще говорит мне, что файл не существует. Также я использую Microsoft Visual Studio – Demomomo

+0

Можете ли вы жестко указать путь к файлу в коде и сказать, работает ли он, пожалуйста? – Kelm

+0

По-прежнему не работает :( – Demomomo

0

Первое, что вам следует начать делать, это написать код, чтобы понять ошибку. Это не только для вас сейчас, для отладки, но и для пользователей позже, когда они будут сталкиваться с проблемами:

.... 
    if (!in1) { // replace this bloc 
     cout << filename << " is not a valid file\n"; // print filename to find out any issues (truncated name, etc...) 
     cout << "Error code: " << strerror(errno)<<endl; // Get some system info as to why 
     char cwd[512];       // print current working directory. 
     getcwd(cwd, sizeof(cwd));    // in case your path is relative 
     cout << "Current directory is " << cwd << endl; 
     cout << "Try again !\n"; 
    } 

Пожалуйста, обратите внимание, что getcwd() работает как под Linux, но в окнах, вам придется использовать _getcwd() вместо ,

ВАЖНОЕ ЗАМЕЧАНИЕ:

Следующая не вызывает вашу ошибку, но это может вызвать проблемы в дальнейшем:

while (!in1.eof()) {  // while not end of file 
     in1 >> val;   // read an integer from file 
     ... 

предпочитают следующее:

while (in1 >> val) {  // while read of file works 
     ... 

Просмотр Arround на SO: есть много вопросов/ответов, которые объясняют, почему.

Смежные вопросы