Я столкнулся с проблемой в 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;
}
Так как у вас проблемы с текстовым файлом, попробуйте открыть его в двоичном режиме, то есть добавить ios :: binary. Таким образом, код становится:
file.open("code.txt",ios::in|ios::binary);
Также файл >> ch используется, когда вы хотите прочитать слово целиком. Поскольку вы хотите читать символ за символом, попробуйте
file.get(ch);
Потенциальная проблема может быть в коде:
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.