2016-09-22 2 views
-5

Я пытался читать .txt файл со следующим текстом:.txt файл для массива char?

Отладка в два раза так сложно, как писать код в первую очередь. Поэтому, если вы пишете код настолько умно, насколько это возможно, вы по определению недостаточно умны, чтобы его отлаживать. - Брайан В. Керниган *

Однако, когда я пытаюсь отправить файл .txt в мой массив символов, все сообщение для слова, кроме «Debugging» печатает, я не знаю, почему. Вот мой код. Это должно быть что-то простое, чего я не вижу, любая помощь будет высоко оценена.

#include <iostream> 
#include <fstream> 

using namespace std; 

int main(){ 

char quote[300]; 

ifstream File; 

File.open("lab4data.txt"); 

File >> quote; 


File.get(quote, 300, '*'); 


cout << quote << endl; 
} 
+0

Этот код не имеет смысла, даже если намеренно читается как псевдо-код. можете ли вы попытаться улучшить свой вопрос, чтобы объяснить, чего вы действительно хотите достичь, пожалуйста. –

+0

Удалить цитату «Файл >>»; это когда первое слово записано в массив и затем перезаписано вызовом 'File.get'. –

+0

Спасибо, что исправлено – Joe

ответ

0

Линия

File >> quote; 

читает первое слово в массиве. Затем следующий вызов File.get копирует слово, которое вы уже прочитали. Итак, первое слово потеряно.

Вы должны удалить вышеуказанную строку из своего кода, и она будет работать правильно.

Обычно я предлагаю использовать std::string вместо массива символов для чтения, но я вижу, что ifstream::get не поддерживает его, ближайший - streambuf.

Остальное, что нужно посмотреть, это проверить правильность открытия файла.

Следующий код делает это.

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int main(){ 

    char quote[300]; 
    ifstream file("kernighan.txt"); 

    if(file) 
    { 
     file.get(quote, 300, '*'); 
     cout << quote << '\n'; 
    } else 
    { 
     cout << "file could not be opened\n"; 
    }  
} 

Объект ifstream конвертируется в bool (или void* в C++ 03 мира) и поэтому могут быть проверены на для truthiness.

0

простой символ методом символ для чтения (не проверено)

включают
#include <fstream> 

using namespace std; 

int main() 
{ 
    char quote[300]; 
    ifstream File; 
    File.open("lab4data.txt"); 
    if(File) 
    { 
     int i = 0; 
     char c; 
     while(!File.eof()) 
     { 
      File.read(&c,sizeof(char)); 
      quote[i++] =c; 
     } 
     quote[i]='\0';   
     cout << quote << endl; 
     File.close(); 
    } 

}

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