Turbo C++ 编译器无法正确读取文本文件。 (只有当我把它做成.dat文件时,它才能正确读取)

Turbo C++ compiler not reading text file properly. (Only when I make it a .dat file, is it read properly)

我遇到了 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;
}

代码中可能存在潜在问题:

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

外面的if语句排除了里面的if语句执行的可能性(space的ASCII码是32,所以ch不能同时32 并满足两个条件之一,因此 id 永远不会递增)。

这似乎不会产生您所描述的行为,它应该只会导致打印 0stdout

如果没有输出示例,很难知道出了什么问题 - 我们需要 MCVe 来提供好的建议。在这里,您的 C 代码只打印文件的内容,而 C++ 代码计算字母字符的数量(也许,我只是浏览了一下)。那么哪个失败了呢?如何?给我们一个输出示例,并阐明你期望每个人做什么。

正如其他人所提到的,Turbo C++ 已过时 - 您应该开始使用 g++ 或 clang。

由于文本文件有问题,请尝试以二进制模式打开它,ie:adding ios::binary。所以代码变成:

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

当您想阅读整个单词时,也可以使用 file>>ch。既然你想一个字符一个字符地读,试试

file.get(ch);