[英]How to read numbers from a text file properly?
我想用C編寫一個彩票程序,將選定的前幾周的數據讀入數組。 我有一個文本文件,其中有5列用制表符分隔。 我的問題如下:
我曾經為“誰想成為億萬富翁”游戲編寫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.