fstream — компилятор Turbo C ++ неправильно читает текстовый файл. (Только когда я создаю файл .dat, он читается правильно)

Я столкнулся с проблемой в C ++ и C, когда мой объект ifstream или указатель файла не читают текстовый файл должным образом и отображают недопустимые символы при выводе. Однако, когда я читаю файл .dat, он выдает правильный результат.

Это код C:

#include <stdio.h>
#include <conio.h>
#include <ctype.h>
void main() {
FILE *file;
char ch;
file = fopen("code.dat", "r");
while((ch = getc(file)) != EOF)
printf("%c", ch);
getch();
fclose(file);
}

Это код CPP:

#include <fstream.h>
#include <iostream.h>
#include <conio.h>
#include <string.h>

int main() {
clrscr();
fstream file;
file.open("code.dat", ios::in);
char ch, c;
char token[6];
int id = 0, op = 0, key = 0;
while (!file.eof()) {
file >> ch;
if(ch == ' ') {
if ((ch > 64 && ch < 91) || (ch > 96 && ch < 123))
id += 1;
}
}

cout << id;
file.close();
getch();
return 0;
}

-4

Решение

Так как у вас проблемы с текстовым файлом, попробуйте открыть его в двоичном режиме, то есть добавить ios :: binary. Таким образом, код становится:

file.open("code.txt",ios::in|ios::binary);

Также файл >> ch используется, когда вы хотите прочитать слово целиком. Поскольку вы хотите читать символ за символом, попробуйте

file.get(ch);
0

Другие решения

Потенциальная проблема может быть в коде:

if(ch == ' ')
{
if((ch > 64 && ch < 91) || (ch > 96 && ch < 123))
id += 1;
}

Внешний if утверждение исключает возможность внутреннего if выполнение оператора (ASCII-код для пробела равен 32, поэтому ch не может быть 32 и удовлетворять одному из двух условий, поэтому id никогда не увеличивается).

Это не похоже на поведение, которое вы описываете, хотя, это должно просто привести к печати 0 в stdout,

Трудно понять, что происходит, без примера вывода — нам нужен MCVe дать хороший совет. Здесь ваш код C просто печатает содержимое файла, тогда как код C ++ считает количество букв алфавита (возможно, я просто просмотрел его). Так какой из них терпит неудачу? И как? Дайте нам пример вывода, а также уточнить, что вы ожидали каждый делать.

Как уже упоминали другие, Turbo C ++ устарел — вместо этого вы должны начать использовать g ++ или clang.

0

По вопросам рекламы [email protected]