簡體   English   中英

如何正確地從文本文件中讀取數字?

[英]How to read numbers from a text file properly?

我想用C編寫一個彩票程序,將選定的前幾周的數據讀入數組。 我有一個文本文件,其中有5列用制表符分隔。 我的問題如下:

  • 我應該用什么分隔列? (例如,逗號,分號,制表符或其他內容)
  • 我應該在最后一行添加一種EOF嗎? (例如-1,“ EOF”)是否有接受的或“正式的”約定?
  • 我應該使用哪個功能讀取數字? 是否有任何適當的或“可接受的”方式從文本文件讀取數據?

我曾經為“誰想成為億萬富翁”游戲編寫C程序。 在那篇文章中,我使用了一種函數,將每行讀入一個足以容納整行的數組。 之后,我將其數據分成這樣的變量:

line: "text1";"text2";"text3";"text4"endline (-> line loaded into a buffer array)
text1 -> answer1 (until reaching the semicolon)
text2 -> answer2 (until reaching the semicolon)
text3 -> answer3 (until reaching the semicolon)
text4 -> answer4 (until reaching the end of the line)
endline -> start over, that is read a new line and separate its contents into variables.

它工作正常,但是我不知道對於程序員來說它是否足夠好。 (順便說一下,我還不是程序員,我在一所大學學習計算機科學)

歡迎每一個答案和建議。 在此先感謝您的幫助!

scanf()系列函數不關心換行符,因此,如果要處理行,則需要先讀取行,然后再使用sscanf()處理行。 scanf()系列函數還可以交替處理空白-空白,制表符,換行符等。 使用制表符作為分隔符很好,但也可以使用空格。 顯然,如果您一次要讀取和處理一行,則換行不會真正影響掃描。

int lottery[100][5];
int line;
char buffer[4096];

for (line = 0; fgets(buffer, sizeof(buffer), stdin) != 0 && line < 100; line++)
{
    if (sscanf(buffer, "%d %d %d %d %d", &lottery[line][0], &lottery[line][1],
               &lottery[line][2], &lottery[line][3], &lottery[line][4]) != 5)
    {
        fprintf(stderr, "Faulty line: [%s]\n", line);
        break;
    }
}

這會在EOF,行太多和行出現故障時停止(其中一個行不能以5個數字開頭;如果願意,您可以在循環中檢查其值,但您需要運行哪些測試?)。 如果要驗證空格分隔符,則必須更加努力。

也許您只想測試5個數字之后的空格和換行符; 這有點棘手(可以完成;在sscanf()查找%n轉換規范)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM