簡體   English   中英

讀取文本文件並在C編程中存儲在數組中

[英]read text file and store in array in c programming

我想讀取文本文件並存儲在數組中然后顯示。

這是我的代碼:

  int i = 0, line = 5;
  char ch[100];

  FILE *myfile;
    myfile = fopen("test.txt","r");
    if (myfile== NULL)
    {
    printf("can not open file \n");
    return 1;
    }

    while(line--){
    fscanf(myfile,"%s",&ch[i]);
    i++;
    printf("\n%s", &ch[i]);
    }

    fclose(myfile);

    return 0;
}

這是我的文字:

測試123562

856

59986

但是結果:

美東時間

2356

56

9986

怎么了? :(

ch[i]持有一個字符。 語句 fscanf(myfile,"%s",&ch[i]); 會將字符串掃描到 ch[i] ,該字符串只能容納一個字符。 沒有 '\\0'地方,它會導致程序出現 未定義的行為 更改

 
 
 
  
  fscanf(myfile,"%s",&ch[i]);
 
  

 
 
 
  
  fscanf(myfile,"%s",ch);
 
  


先前的答案是錯誤的。 程序的行為已明確定義,但您以錯誤的方式掃描文件。 如果放置i++;您的程序將按預期運行i++; printf語句之后。

 while(line--){ fscanf(myfile,"%s",&ch[i]); printf("\\n%s", &ch[i]); i++; } 

原因是&ch[i]是指向數組 i 元素的指針,字符串將從位置i開始存儲在數組中。 對於給定的輸入,這將起作用,因為給定的數組足夠大以容納字符串。

您可以這樣做:

 while(line--){ fscanf(myfile,"%s",ch); printf("\\n%s", ch); i++; } 

但每次掃描到字符串時,它將覆蓋數組ch 最好使用二維數組存儲字符串並使用fgets讀取文件。

您將無法在單個char ch[100]數組中容納五行; 那只是一個100個字符的數組。

您可以使其成為數組的數組,即char ln[5][100] ,這將為您提供容納五行的空間,每行100個字符。

然后,您當然需要在循環中索引到該數組,即:

for(int i = 0; i < 5; ++i)
{
  if(fgets(ln[i], sizeof ln[i], myfile) == NULL)
  {
    fprintf(stderr, "Read error on line %d\n", i);
    exit(1);
  }
}

這使用fgets()其是在整個行讀取適合; fscanf()將停在%s空白處,這很少是您想要的。

獲取字符串時,無需在scanf中使用“&”號。 使它變成這樣。

fscanf(myfile,"%s",&ch[i]);

fscanf(myfile,"%s",ch);

&ch[i]將獲得該數組中第i個位置的字符。 如果您想要這樣,可以使用%c代替%s 並將其更改為。

printf("\n%s", ch);

當您使用與號(&)來打印字符串時,該符號將訪問該變量的地址。

  1. 開發的程序必須能夠使用fopen函數a讀取包含矩陣A和矩陣B的輸入文件。 大小不同的矩陣A和B可以存儲在不同的輸入文件中(如果需要)。
  2. 使用fscanf函數和for循環將矩陣A和B掃描並分配為數組
  3. 執行矩陣運算 添加矩陣A和B b。 減去矩陣A和B c。 乘以矩陣A和B
  4. 使用條件語句if或switch在3、4和5個元素矩陣之間切換。
  5. 使用fprintf函數在名為output.dat的新文件中打印所有輸入矩陣和獲得的結果。
  6. output.dat文件必須具有包含以下信息的頭: 學生姓名b。 學生矩陣號c。 課堂部分d。 講師姓名e。 項目名稱
  7. 在標題下,輸出文件必須包含矩陣A和B以及矩陣運算的結果。 使用矩陣A和B,如下所示:

暫無
暫無

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

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