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