Чтение из текстового файла в Turbo C++ 3.0

Первый пост. Пожалуйста, дайте мне знать, если я что-то пропустил, или если вам нужна дополнительная информация.

Итак, что я пытаюсь здесь сделать, так это прочитать данные из текстового файла в Turbo C++ 3.0, а затем вывести этот текст.

Вот мой код (обновлено):

ifstream playerData("players.txt");
const int size = 100;
char* dataArray = new char[size];

while(!playerData.eof()){
    for(int i=0; i<size; i++){
        playerData>>dataArray[i];
        if(dataArray[i]=='\n'){
            cout<<"\n";
        }
        cout<<dataArray[i];
    }
}

Если у меня есть следующий текст в файле player.txt:

ABC - 7 minutes
DEF - 4 minutes

Тогда вот что выводится:

ABC-7minutesDEF-4minutes

person user3755083    schedule 19.06.2014    source источник
comment
Какая версия Турбо С++?   -  person M.M    schedule 19.06.2014
comment
@MattMcNabb Версия 3.0   -  person user3755083    schedule 19.06.2014


Ответы (2)


Я не знаю, что должно быть &(dataArray[i])=="\n". Похоже, вы просто догадывались, пока ошибки компилятора не исчезли. Это не лучший способ кодирования любого языка, не говоря уже о C++.

То, что вы написали, проверяет, находится ли элемент dataArray[i] по тому же адресу памяти, что и литеральный массив "\n". Конечно, нет, поэтому этот тест всегда будет неудачным.

Если вы хотели сравнить с символом, напишите if (dataArray[i] == '\n'). Однако это все равно будет ошибкой, поскольку dataArray[i] еще не присвоено значение. Вы должны переместить строку на после чтения в dataArray[i].

Другие проблемы:

  • Вы переполняете буфер, измените i<=size на i < size
  • Вы используете new без причины; вместо этого используйте массив
  • Вы не проверяете успешность вашей операции >>.
  • while(!playerData.eof()) — ошибка; вместо этого вы должны сломаться, когда >> терпит неудачу

Кроме того, Turbo C++ 3.0 вышел до первого стандарта C++, поэтому не рекомендуется использовать его для C++. В итоге:

  • учитесь по книге, а не методом проб и ошибок
  • Получите современный компилятор (есть хорошие бесплатные)
person M.M    schedule 19.06.2014
comment
Спасибо за это, я буду иметь это в виду. Я обновил код, но он все еще не работает. Может быть потому, что playerData››dataArray[i]; не читает в разрывах строк? - person user3755083; 19.06.2014
comment
Да, >> выполняет форматированный ввод и в этом случае пропускает пробелы. Если вам нужны неформатированные данные, используйте playerData.get(dataArray[i]). В стандартном C++ вы можете получить всю строку сразу, хотя я не уверен, что Turbo C++ 3.0 имеет эту функцию. - person M.M; 19.06.2014
comment
Здорово! Спасибо, это работает. Я думаю, вы правы, говоря, что я должен использовать более новый компилятор. - person user3755083; 19.06.2014

Вы сравниваете адрес iго символа с адресом константного литерала "\n", что бесполезно. Чтобы сравнить символ с символом \n, вы должны использовать одинарные кавычки: '\n', а также удалить оператор &.

if (dataArray[i]=='\n')

Забудьте о Turbo C++ и используйте новые и современные компиляторы


После обновления

Вы должны попытаться использовать STL и управляемые контейнеры, а также ваши указатели и new/delete. Более того, тестирование по .eof() — не лучшая практика, используйте сам объект. А чтобы получить строку, вы можете использовать функцию std::getline. Перепишите свой код в стандартном новом компиляторе:

ifstream playerData("players.txt");

while(playerData) {

   string dataArray;

   getline(playerData, dataArray);

   cout << dataArray << '\n';
}
person masoud    schedule 19.06.2014