2012-01-29 61 views
0

我正在使用Dev C++進行此編程分配。從包含Int和Char數據類型的文件讀取

我會嘗試給這個問題一個基本的破敗......

我試圖寫一個程序,將讀取時間戳和溫度從文件中讀取,然後把時間戳一個特定的格式,並根據需要將溫度轉換爲攝氏溫度。輸入文件在文件頂部有一個標記號,用於告知需要讀取多少行數據。在這個單個int之後,每行包含一個數字(即200103121915 F51.13),日期和溫度之間有一個單獨的空格。格式爲YYYYMMDDHHMM。如果不使用指針或任何面向對象編程,我們應該將每個條目轉換爲MM/DD/YYYY HHMM格式,如果溫度以華氏溫度給出,則需要將其轉換爲攝氏溫度。

我遇到了我試過的每種方法的問題。首先,我只是將整個12位數的數字作爲整數讀取,然後使用一些模數命令將每個部分分開。但是,我發現int不會包含那麼大的數字。接下來,我想將每個數字讀入一個數組,然後將各個數組拼成正確的格式。我不知道如何一次讀一位數字。我在想這個數組需要是int類型的,但那麼我將如何處理F或C標籤呢?基本上我只是想找一些關於如何完成這個任務的基本想法,而不是要求別人寫代碼。

+0

C++是不是我的主要語言,但我會爲已讀每個字段一個字符串。我假設這是一個基於文本的文件。看到這個[鏈接](http://www.bgsu.edu/departments/compsci/docs/read.html) – 2012-01-29 04:37:00

+0

這個字符串想法看起來非常有希望完成賦值的格式化部分。感謝您的鏈接!但是,對於溫度讀數,有沒有辦法對數據的數字部分進行計算? – LuckyMeadows 2012-01-29 04:42:00

+0

什麼阻止你使用long long而不是int? – 2012-01-29 04:52:40

回答

0

如果您剛開始使用C++中的I/O,則可能會爲參考站點添加書籤,因爲該庫提供了很多選項和功能。

  • cppreference.com是一個非權威但方便的來源,維基風格。
  • Cay Horstmann寫了一篇文章,涵蓋了更多的內容,並且您可以搜索關鍵詞。
  • cplusplus.com對舊語言功能有相當好的覆蓋率,但有一些錯誤,並沒有很好地更新。

作爲進一步的指針,std::setw操縱可能有助於提取字符的給定數量的 - 雖然它不會過於貪婪停止數字提取。

+0

感謝您的好鏈接,我已經爲這些鏈接添加了書籤以供將來使用!我想我終於使我的代碼朝着正確的方向前進。我會在完成後發佈它。 – LuckyMeadows 2012-01-30 05:13:46

+0

'setw'不影響數字提取,是嗎?它確實影響的唯一功能似乎需要一個指針,這是由問題約束禁止的:( – 2012-01-31 04:46:47

+0

@ BenVoigt:確實,檢查§22.4.2.1.2/ 3「階段2」,字段寬度沒有提及!有必要將字符讀入一箇中間緩衝區,可能在'setw'的控制下(真是一團糟)。 – Potatoswatter 2012-01-31 06:55:09

1

只要使用舊學校的stdio.h函數,這樣會更容易。

fscanf(stream, "%4d%2d%2d%2d%2d %c%f", &year, &month, &mday, &hour, &minute, &unit, &temp); 

如果你真的真的真的不能使用指針,然後

year = 1000 * (fgetc(stream) - '0'); 
year += 100 * (fgetc(stream) - '0'); 
year += 10 * (fgetc(stream) - '0'); 
year +=  (fgetc(stream) - '0'); 
month = 10 * (fgetc(stream) - '0'); 
month+=  (fgetc(stream) - '0'); 

等等...

相關問題