2012-01-30 151 views
0

我正在研究從文件讀取數據,處理數據並寫入另一個文件的類的程序。我們需要在程序中使用兩個函數,並且我相信我的程序由於函數的某些錯誤而無法正常工作。C++作業功能錯誤

首先,讓我描述輸入文件,然後添加我的代碼。輸入文件以一個標記號開始,讓程序知道要讀取的行數。每行接下來的行由12個數字組成,表示YYYYMMDDHHMM形式的日期和Xtemp形式的溫度讀數,其中x爲c或f(例如C17.5或F64.12)。我們的輸出應該將臨時溫度轉換爲攝氏溫度,如果它們還沒有出現,那麼每一行都應該以格式「17.5 C ---記錄於2009年12月4日」格式出現,以此類推。

這是我的代碼到目前爲止。就像我說過的,我認爲問題在於功能。

#include <iostream> 
#include <fstream> 
#include <iomanip> 
#include <cstdlib> 

using namespace std; 

void timeConverter(char timeStamp[]); 
float tempConverter(float); 

int main() 
{ 
    ifstream fin; 
    ofstream fout; 
    int endcycler, cycler; 
    char timeStamp[11]; 
    char tempUnit; 
    float tempData; 


    fin.open("aquarenadata.dat"); 
    if (!fin) 
    { 
      cout<<"Error opening input file"<<endl; 
      system("pause"); 
      return -1; 
    } 

    fout.open("formatteddata.dat"); 

    fin >> endcycler; 
    cycler = 0; 

    while (cycler < endcycler) 
    { 
      fin >> timeStamp; 
      fin >> tempUnit; 
      fin >> tempData; 

      if (tempUnit == 'C' || tempUnit == 'c') 
       cout << tempData << " C --- recorded on "; 
      else if (tempUnit == 'F' || tempUnit == 'f') 
      { 
       tempData = tempConverter(tempData); 
       cout << tempData << " C --- recorded on "; 
      } 
      else 
      { 
       cout <<"Invalid temperature scale"<<endl; 
       system("pause"); 
       return -2; 
      }  
      void timeConverter(); 
      cycler++; 

    } 


    fin.close(); 
    fout.close();    
    system("pause"); 
    return 0; 
} 


void timeConverter (char timeStamp[]) 
{ 
    cout<<timeStamp[4]<<timeStamp[5]<< "/" <<timeStamp[6]<<timeStamp[7]<< "/"<<timeStamp[0]<<timeStamp[1]<<timeStamp[2]<<timeStamp[3]<< " at " <<timeStamp[8]<<timeStamp[9]<<timeStamp[10]<<timeStamp[11]<<endl; 

} 

float tempConverter (float tempData) 
{ 
    float result; 
    result = (tempData - 32) * (5/9); 
    return result; 
} 
+0

你會得到什麼錯誤? – 2012-01-30 05:14:37

+0

程序的輸出在攝氏但不是Fahrneheit時給出正確的溫度,所以我認爲tempConversion函數有些問題。此外,日期不打印到屏幕上,所以我猜測timeConverter也存在問題。 timeConverter在main函數的主體中工作,但是一旦我將它放入函數中,它就停止工作。我想我沒有正確傳遞數據。 – LuckyMeadows 2012-01-30 05:17:05

+0

此外,我知道它目前正在打印到屏幕而不是文件,只是這樣做來快速檢查輸出。 – LuckyMeadows 2012-01-30 05:17:32

回答

1

至於顯示日期的問題,這可能是事實上,你實際上沒有調用timeConverter函數。取而代之的

void timeConverter(); 

嘗試

timeConverter(timestamp); 

您可能還需要確保輸入的是正確的格式,即時間戳實際上是長度至少爲8的

對於轉換中的錯誤,如果你給我們實際的價值,它會返回一些輸入。

+0

timeConverter工作完美。現在它以正確的格式爲我的所有輸入打印正確的時間!至於temp對話,如果我用F標籤放置一個temp,它總是給出0. if,else if語句適用於C和除c或f以外的任何值,而不是F. – LuckyMeadows 2012-01-30 05:53:39