我目前正在學習 C 編程(我的經驗是 Python、Java 和 Swift)。我正在嘗試計算文本檔案的第一行有多少個數字。
文本檔案看起來有點像這樣:
-54 37 64 82 -98
...
我嘗試過各種不同的想法。第一個是依次檢查每個字符的 EOL,如果不是,則在總數中加 1。我很快意識到這僅適用于單個數字,而不適用于一般整數。
然后我嘗試使用fscanf查找行中的最后一個數字,然后倒帶并使用 fscanf 計算每個數字,直到再次找到最后一個數字:
int temp;
FILE *fd = fopen("test.txt", "r");
fscanf(fd, "%d\n", &temp);
printf("Last Number on Line is: %d\n", temp);
然而,在我撰寫下一個邏輯來計算數字之前,我意識到這Last Number on Line is: -54不是上述檔案示例的預期輸出。
在這一點上,我相當卡住。由于問題的相似性,在線搜索主要回傳關于如何計算檔案中有多少行的結果。
任何幫助將非常感激!
uj5u.com熱心網友回復:
最后,我在這里使用了建議并提出了以下解決方案:
char buffer;
int temp = 0;
int row_count = 0;
while((buffer = getc(fd)) != '\n') {
if (temp == 0 && (isdigit(buffer))) {
col_count = 1;
temp = 1;
} else if (temp == 1 && buffer == ' ') {
temp = 0;
}
}
在我使用它的情況下,這對我來說很好,感謝您的幫助
uj5u.com熱心網友回復:
您可以使用該函式fgets從檔案中讀取一行。然后您可以使用該函式sscanf來計算行中的數字數量。
例如,假設您已經從檔案中讀取了一行并將其存盤在具有名稱的陣列中s
char s[] = "1 12 123 1234 12345\n";
現在在一個回圈中,您可以通過以下方式計算數字的數量
size_t count = 0;
int pos;
for (const char *p = s; sscanf( p, "%*d%n", &pos ) != EOF; p = pos)
{
count;
}
printf( "count = %zu\n", count );
此代碼段的輸出將是
count = 5
如果您不知道檔案中記錄的最大大小,您可以動態重新分配一個字符陣列,直到fgets讀取換行符'\n',然后使用sscanf.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/526111.html
標籤:C文件数字c字符串数数
