2017-07-17 63 views
-4

我面臨C++和C的問題,其中我的ifstream對象或文件指針不能正確讀取文本文件,並在輸出時顯示非法字符。但是,當我讀取.dat文件時,它會輸出正確的結果。Turbo C++編譯器沒有正確讀取文本文件。 (只有當我把它做成一個.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; 
} 
+5

Turbo C++是一個古老的編譯器,已停止支持。它在語言標準化之前使用C++方言。如果你想學習C++,它的用法就是升級到現代。 GCC和Clang是不錯的選擇。 – StoryTeller

+2

「我正面臨C++和C的問題,我的ifstream對象在哪裏」 - 您不知道。 C沒有「ifstream對象」。這是一種完全不同的語言! – Olaf

+0

[爲什麼不用Turbo C++編譯簡單的「Hello World」風格的程序?](https://stackoverflow.com/questions/44863062/why-doesnt-a-simple-hello-world-style -program-compile-with-turbo-c) –

回答

0

由於您遇到了文本文件的問題,請嘗試以二進制模式打開它,即:添加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代碼爲as速度是32,所以ch不能同時滿足這兩個條件中的一個,所以id從不增加)。

這看起來好像不會產生您所描述的行爲,但應該只會導致將0打印到stdout

如果沒有輸出示例,很難知道發生了什麼問題 - 我們需要一個MCVe來提供很好的建議。在這裏,你的C代碼只是打印文件的內容,而C++代碼則計算字母字符的數量(也許我只是略過了它)。那麼哪一個失敗?如何?給我們一個的例子,輸出,和澄清你期望的每個人做什麼。正如其他人所提到的,Turbo C++已經過時 - 您應該開始使用g ++或clang來代替。

+0

對不起,其實代碼是,如果(ch!='')... –

相關問題