[英]reading data from file in c
我有一個名為prob的txt文件,其中包含:
6 2 8 3
4 98652
914
143 789
1
527 146
85
1 74 8
7 6 3
每行有9個字符,並且有9行。 由於我無法在c中創建字符串數組,因此我將使用二維數組。 仔細運行代碼,無窮循環是常見的,它會打印出奇怪的輸出。 我也很好奇它在哪里停止接收字符串? 直到換行? 每個“保存”的預期結果:6 2 8 3或擺動包含的行。
#include <stdio.h>
FILE *prob;
main()
{
prob = fopen("prob.txt", "r");
char grid_values[9][9];
char save[9];
int i;
for (i = 0; (fscanf(prob, "%s", save) != EOF); i++)
{
int n;
for (n = 0; n <= 9; n++)
{
grid_values[i][n] = save[n];
printf("%c", grid_values[i][n]);
}
}
fclose(prob);
}
這看起來像是一個作業問題,所以我會盡力為您提供一些建議。
首先,閱讀fscanf函數的描述和“%s”轉換的描述。
這是我對“%s”的描述中的一個片段:
匹配一系列非空格字符; 下一個指針必須是指向足夠長的字符數組的指針,以容納輸入序列和終止的空字符('\\ 0'),該字符將自動添加。 輸入字符串停在空白處或最大字段寬度處,以先到者為准。
以下是兩個要點:
現在,要解決此問題,可以將字符讀取到二維數組中:您需要使用其他函數。 查看您的C stdio函數列表。
看到有用的聲音了嗎?
如果您還沒有,我會給您一個提示:恐懼。 它將從輸入流中讀取固定數量的字節。 在您的情況下,您可以告訴它始終讀取9個字節。
僅在保證每行被填充為9個字符的情況下才有效。
另一個功能是fgets。 同樣,請仔細閱讀功能文檔。 fgets是另一個函數,它附加一個終止null。 然而! 在這種情況下,如果您告訴fgets大小為9,則fgets將僅讀取8個字符,並且它將終止空值寫入第9個字符。
但是還有另一種方式! 回到fscanf!
如果您查看其他轉換說明符,則可以使用“%9c”讀取9個字符。 如果使用此操作,它將不會在字符串中添加終止null。
使用fread和fscanf“%9c”時,如果要在其他函數(例如printf)中將這9個字節用作字符串,則需要將緩沖區設置為10個字節,並且在每個fread或fscanf函數之后,都需要寫save[9] = '\\0'
。
請務必仔細閱讀文檔。 C字符串函數有時會以一種方式做到這一點。 但不總是。
如果使用fscanf
,它將在空格分隔符后停止。
嘗試fgets
來做..它將逐行讀取..
for (i = 0; (fgets(save, sizeof(save), prob) != EOF); i++)
fgets
使用的詳細信息可以在這里找到:
http://www.cplusplus.com/reference/clibrary/cstdio/fgets/
--edited--
這是第二個
while(!feof(file))
{
fgets(s, sizeof(s), file); ......
}
我認為它會很好..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.