[問題] C fgets() 與陣列

看板C_and_CPP作者 (來不及了)時間15年前 (2010/09/29 02:47), 編輯推噓5(5018)
留言23則, 5人參與, 最新討論串1/2 (看更多)
用fgets 一行一行讀取檔案(檔案內是100行亂數) 想將讀取到的每行數字,再放入另一個陣列A[] 但是跑出來的結果都怪怪的... 直接printf(str)可以正確看到已經讀取的所有數字 但就是不知道要怎麼放進陣列... int main() { int i = 0; char A[99]; char str[128]; FILE *fp; fp = fopen("mlist.txt","r"); while(fgets(str,4,fp) != NULL) { printf(str); i++; } fclose(fp); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.128.194.57

09/29 10:48, , 1F
「放進陣列」的意思是?
09/29 10:48, 1F

09/29 10:49, , 2F
將str裡的內容放進自己另外宣告的新陣列A裡頭
09/29 10:49, 2F

09/29 10:50, , 3F
那你的A必須宣告成二維,譬如 char A[99][128];
09/29 10:50, 3F

09/29 10:50, , 4F
等等,還是你需要的其實只是 strcpy(A, str); 而已?
09/29 10:50, 4F
※ 編輯: ny8656 來自: 140.128.194.57 (09/29 10:50)

09/29 10:53, , 5F
如果你是說 A[0] 第一個數字,A[1]第二個數字...的話
09/29 10:53, 5F

09/29 10:53, , 6F
那你的A就必須是 char A[100][128]; 之類的二維
09/29 10:53, 6F

09/29 10:54, , 7F
在 while 裡加個 strcpy(A[i], str); 就可以了
09/29 10:54, 7F

09/29 10:58, , 8F
恩,我想要的就是你指的A[n]是第n個數字
09/29 10:58, 8F

09/29 11:07, , 9F
09/29 11:07, 9F

09/29 11:14, , 10F
是我想要的結果!但是想再問一下,為什麼會用到二維陣列?
09/29 11:14, 10F

09/29 11:17, , 11F
先想想:為什麼你的 str[128] 必須是一維陣列呢?
09/29 11:17, 11F

09/29 11:22, , 12F
fgets(A,99,fp); <這樣可以嗎
09/29 11:22, 12F

09/29 11:23, , 13F
說個可能比較無關的, 如果檔案裡有 %s 之類的, 丟進 printf
09/29 11:23, 13F

09/29 11:23, , 14F
直接印也不太妥當
09/29 11:23, 14F

09/29 11:26, , 15F
沒有想到樓上的問題耶 XD 那要怎麼避開這個問題?
09/29 11:26, 15F

09/29 11:29, , 16F
瞭解了...thx
09/29 11:29, 16F

09/29 11:47, , 17F
sturct myStr { char str[128]} A[99];
09/29 11:47, 17F

09/29 12:22, , 18F
fputs ?
09/29 12:22, 18F

09/29 12:23, , 19F
都忘了有fputs,還想說掃整個字串檢查有沒有%s...XDD
09/29 12:23, 19F

09/29 12:26, , 20F
fputs 正解! 不過這樣就得每個數字各自一行了, printf
09/29 12:26, 20F

09/29 12:26, , 21F
給格式字串 "%s" 也可
09/29 12:26, 21F

09/29 14:33, , 22F
printf %s 感覺就有點繞路, 因為要印的不是 formatted str
09/29 14:33, 22F

09/29 14:33, , 23F
話雖如此我還是很長這樣用就是了 orz
09/29 14:33, 23F
文章代碼(AID): #1CegYv1L (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1CegYv1L (C_and_CPP)