2013-07-13 132 views
-6

你能幫我找到什麼是我從下面的線,這2行錯誤。由於我是C++中的新手,我需要你的幫助人員。此外,如何將這個代碼更改爲C++,因爲我用C編程語言而不是C++需要幫助在c + +代碼

與fgets(線,80%,在)

錯誤: 倒帶(在); rows = countLines(in);

代碼:

int container:: countLines(ifstream in) 
{ 
    int count = 0; 
    char line[80]; 
    if (in.good()) 
    { 
     while (!in.eof()) 
      if (in>>line) count++; 
     rewind(in); 
    } 
    return count; 
} 

// opens the file and stores the strings 
// 
// input:  string of passenger data 
//    container to store strings 
// 
int container:: processFile(char* fn) 
{ 
    char line[80]; 
    ifstream in ; 
    in.open(fn); 
    int count = 0; 
    if (!in.fail()) 
    { 
     rows = countLines(in); 
     strings = new char* [rows]; 
     while (!in.eof()) 
     { 
      if (in>>line) 
      { 
       strings[count] =new char [strlen(line)+1]; 
       strcpy(strings[count],line); 
       count++; 
      } 
     } 
    } 
    else 
    { 
     //printf("Unable to open file %s\n",fn); 
     //cout<<"Unable to open file "<<fn<<endl; 
     exit(0); 
    } 
    in.close(); 
    return count; 
} 
+0

顯然你正在使用C++爲你正在使用命名空間運算符 – turnt

+0

看看這裏(http://en.cppreference.com/w/cpp/io/c/rewind)。倒回是一個C函數,它對FILE進行操作,但是你試圖倒回一個C++流。 – Vincent

+2

['while(!eof())'wrong。](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) – chris

回答

2

一般來說,當你通過流參數,你不按值傳遞:

int container:: countLines(ifstream in) 

您通過引用傳遞:

int container:: countLines(ifstream& in) 

這個邏輯是錯誤的:

if (in.good()) 
    { 
     while (!in.eof()) 
      if (in>>line) count++; 
    } 

請勿以這種方式使用eof()。相反:

while (in >> line) 
    count++; 

這是如何在C倒帶:

rewind(in); 

在C++中,再看seekg功能: http://en.cppreference.com/w/cpp/io/basic_istream/seekg

身高超過焦炭使用的std :: string *:

strings = new char* [rows]; 

再次,不要使用eof():

while (in >> line) 
{ 
    strings[count] =new char [strlen(line)+1]; 
    strcpy(strings[count],line); 
    count++; 
} 
+0

謝謝非常有幫助。但是當我嘗試拋棄eof時,它給了我錯誤,爲什麼會發生這種情況?我根本不知道 –

+1

@PramonoWang:既然你沒有告訴我錯誤是什麼,我不能幫你。 – Bill

+0

@PramonoWang:請參閱編譯代碼:https://ideone.com/PZpUJe – Bill