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
永远不会递增)。
这似乎不会产生您所描述的行为,它应该只会导致打印 0
到 stdout
。
如果没有输出示例,很难知道出了什么问题 - 我们需要 MCVe 来提供好的建议。在这里,您的 C 代码只打印文件的内容,而 C++ 代码计算字母字符的数量(也许,我只是浏览了一下)。那么哪个失败了呢?如何?给我们一个输出示例,并阐明你期望每个人做什么。
正如其他人所提到的,Turbo C++ 已过时 - 您应该开始使用 g++ 或 clang。
由于文本文件有问题,请尝试以二进制模式打开它,ie:adding ios::binary。所以代码变成:
file.open("code.txt",ios::in|ios::binary);
当您想阅读整个单词时,也可以使用 file>>ch。既然你想一个字符一个字符地读,试试
file.get(ch);
我遇到了 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
永远不会递增)。
这似乎不会产生您所描述的行为,它应该只会导致打印 0
到 stdout
。
如果没有输出示例,很难知道出了什么问题 - 我们需要 MCVe 来提供好的建议。在这里,您的 C 代码只打印文件的内容,而 C++ 代码计算字母字符的数量(也许,我只是浏览了一下)。那么哪个失败了呢?如何?给我们一个输出示例,并阐明你期望每个人做什么。
正如其他人所提到的,Turbo C++ 已过时 - 您应该开始使用 g++ 或 clang。
由于文本文件有问题,请尝试以二进制模式打开它,ie:adding ios::binary。所以代码变成:
file.open("code.txt",ios::in|ios::binary);
当您想阅读整个单词时,也可以使用 file>>ch。既然你想一个字符一个字符地读,试试
file.get(ch);