2015-02-05 3 views
-1
#include <iostream> 
#include <string> 
#include <fstream> 

using namespace std; 

void read(); 

int main() { 
    read(); 
    return 0; 
} 




void read() { 
    string file(""); 
    string nameOfFile(""); 
    cin >> nameOfFile; 
    ifstream in (nameOfFile); 
    while (!in.eof()) { 
    getline(in, file); 
    cout << file; 
    cout << endl; 
} 
cout << file; 
in.close(); 
} 

Почему это не работает, я пытаюсь сделать так, чтобы я мог ввести, в каком файле я хочу читать?Как сообщить вашей программе, какой файл вы хотите прочитать C++

Я действительно новичок в C++, извините, если это очевидное решение.

+1

первый не делают, пока - много SO сообщений на этот – pm100

+0

второй - то, что идет не так? Что вы видели, когда вы запускали его с помощью отладчика? – pm100

+0

'В' Не было объявлено в этой области, –

ответ

-1

Вам нужно открыть ifstream usign in.open() и перекрыть случай, когда файл также не существует. здесь функция:

void read() { 
    string file(""); 
    string fileContent = ""; 
    string nameOfFile(""); 
    cin >> nameOfFile; 
    ifstream in(nameOfFile.c_str()); 
    in.open(nameOfFile, ios::in); 
    if (in){ 
     while (!in.eof()) { 
      getline(in, file); 
      fileContent += file; 
     } 
     cout << fileContent; 
     in.close(); 
    } 
    else { 
     cout << "Could not open file."; 
    } 
} 
+0

Большое вам спасибо, я никогда не ожидал, что это сообщество будет таким дружелюбным. –

+0

Этот код не компилируется, и это не отвечает на проблему OP. – shauryachats

+0

@Shaurya, я использую VS 2013, и он отлично работает на моей машине. Возможно, у вас есть какая-то другая версия VS или проблема в другом месте. –

1

Вы должны изменить

ifstream in (nameOfFile); 

с

ifstream in (nameOfFile.c_str()); 

потому, что конструктор по умолчанию для ifstream не принимает std::string в качестве аргумента, он нуждается в char *. Следовательно, используйте функцию std::string::c_str() для преобразования std::string в char *.

+1

Вы можете использовать 'std :: string' в C++ 11. –

+0

Большое вам спасибо! –

+0

@KyleMcCarthy, если бы вы могли сказать мне, чего не хватает в моем ответе? – shauryachats

0

Немного обратной связи: (! in.eof)

void read() { 
    string file("");  // you don't need the ("") bit; empty by default, 
          // and "file" is a terrible choice of identifier as 
          // it sounds more like an ifstream than a string 
          // used to hold one line from the file. 
          // I tend to use "string line;" for this. 
    string nameOfFile(""); // ditto 
    cin >> nameOfFile;  // you should test for success of input, like this: 
          // if (!cin >> nameOfFile) { 
          //  std::cerr << "error reading filename from stdin\n"; 
          //  exit(1); 
          // } 
    ifstream in (nameOfFile); // test for success getting file open like this: 
          // if (ifstream in(nameofFile)) 
          // { 
    while (!in.eof()) {  // NEVER check eof before attempting input, instead: 
    getline(in, file);  //  while (getline(in, file)) 
    cout << file;   //   cout << file << endl; // can "chain" 
    cout << endl;   // } 
          // else 
          //  std::cerr << "couldn't open " << nameOfFile 
          //   << '\n'; 
}       // no need for extra cout nor explicit close, as 
cout << file;    // the ifstream destructor closes anyway. 
in.close(); 
}