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

#c #turbo-c #borland-c

#c #turbo-c #borland-c

Вопрос:

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

Хорошо, итак, что я пытаюсь здесь сделать, это прочитать данные из текстового файла в 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];
    }
}
 

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

 ABC - 7 minutes
DEF - 4 minutes
 

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

 ABC-7minutesDEF-4minutes
 

Комментарии:

1. Какая версия Turbo C ?

2. @MattMcNabb Версия 3.0

Ответ №1:

Я не знаю, что amp;(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 не очень хорошая идея. В итоге:

  • учитесь по книге, а не методом проб и ошибок
  • Получите современный компилятор (есть хорошие бесплатные)

Комментарии:

1. Спасибо за это, я буду иметь это в виду. Я обновил код, но он все еще не работает. Может быть, это потому, что PlayerData>> dataArray[i]; не читается в разрывах строк?

2. Да, >> выполняет форматированный ввод и пропускает пробелы в этом случае. Если вы хотите использовать неформатированные данные playerData.get(dataArray[i]) . В стандартном C вы можете получить целую строку сразу, хотя я не уверен, есть ли в Turbo C 3.0 такая функция.

3. Отлично! Спасибо, это работает. Я думаю, вы правы, говоря, что я должен использовать более новый компилятор.

Ответ №2:

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

 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';
}