冰楓論壇

標題: C作業問題求助 [打印本頁]

作者: 呂晨    時間: 2021-9-7 12:04
標題: C作業問題求助
本帖最後由 呂晨 於 2021-9-7 12:06 編輯

要用fopen來讀txt檔來確認要進行矩陣轉置或是矩陣相乘
並且在程式內完成轉置或相乘,並不用輸出到新的txt檔裡面,只要顯示在小黑窗就好
第三張圖是我的程式碼,以及輸出結果
問題一:讀檔只會讀第一行並不會往下繼續讀
問題二:要如何把字串中的數字抓出來

1.PNG (5.33 KB, 下載次數: 7)

1.PNG

2.PNG (6.24 KB, 下載次數: 8)

2.PNG

3.PNG (48.35 KB, 下載次數: 8)

3.PNG


作者: love6610716    時間: 2021-9-7 13:17
本帖最後由 love6610716 於 2021-9-7 13:22 編輯

行 24, 25 只有執行一次所以你才只有讀取一行
常用的讀檔方式

  1. while( !feof( fp ) )
  2. {
  3.         // fscanf, print
  4. }
複製代碼
字串中讀取數字
逐char讀取只要是數字就加總起來就可以

  1. void test(char* str){
  2.     char * h; // first copy the pointer to not change the original
  3.     int num = 0;
  4.     int flag = 0;
  5.     for (h = str; *h != '\0'; h++) {
  6.         if(*h >= '0' && *h <= '9'){
  7.             num = num*10 + (*h-'0');
  8.             flag = 1;
  9.         }else if(flag){
  10.             printf("num: %d\n", num);
  11.             num = 0;
  12.             flag = 0;
  13.         }
  14.     }

  15. }
複製代碼
至於 test 中甚麼要加 flag 你可以測試把 flag 刪掉後執行的結果差異
test 執行結果
b.png


作者: 呂晨    時間: 2021-9-7 14:55
love6610716 發表於 2021-9-7 13:17
行 24, 25 只有執行一次所以你才只有讀取一行
常用的讀檔方式字串中讀取數字
逐char讀取只要是數字就加總起 ...

不知道我哪裡做錯了
讀取input01.txt檔後的結果只有3、6、9C:\Users\luluchen\Desktop\3.PNG
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #pragma warning( disable : 4996 )

  4. void test(char* str);

  5. int main()
  6. {
  7.         int a[3][3];
  8.         char name[12];
  9.         char mode[100];

  10.         printf("輸入txt名稱(結尾.txt)");
  11.         scanf("%s", &name);

  12.         FILE* fp = fopen(name, "r");

  13.         if (fp == NULL)
  14.         {
  15.                 printf("error");
  16.                 return 0;
  17.         }

  18.         fscanf(fp, "%s", &mode);
  19.         if (mode[7] == 'T')
  20.         {
  21.                 while (!feof(fp)) {
  22.                         fscanf(fp, "%s", &mode);
  23.                         test(mode);
  24.                 }
  25.         }
  26.         fclose(fp);
  27. }

  28. void test(char* str)
  29. {
  30.         char* h;
  31.         int num = 0;
  32.         int flag = 0;
  33.         for (h = str; *h != '\0'; h++) {
  34.                 if (*h >= '0' && *h <= '9') {
  35.                         num = num * 10 + (*h - '0');
  36.                         flag = 1;
  37.                 }
  38.                 else if (flag) {
  39.                         printf("num: %d\n", num);
  40.                         num = 0;
  41.                         flag = 0;
  42.                 }
  43.         }
  44. }
複製代碼

3.PNG (16.51 KB, 下載次數: 8)

3.PNG


作者: love6610716    時間: 2021-9-7 18:38
呂晨 發表於 2021-9-7 14:55
不知道我哪裡做錯了
讀取input01.txt檔後的結果只有3、6、9

試試這個
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #pragma warning( disable : 4996 )

  4. void test(char* str);

  5. int main()
  6. {
  7.         int a[3][3];
  8.         char name[12];
  9.         char mode[100];

  10.         printf("輸入txt名稱(結尾.txt)");
  11.         scanf("%s", &name);

  12.         FILE* fp = fopen(name, "r");

  13.         if (fp == NULL)
  14.         {
  15.                 printf("error");
  16.                 return 0;
  17.         }

  18.         fgets(mode, sizeof(mode), fp);
  19.         if (mode[7] == 'T'){
  20.                 fgets(mode, sizeof(mode), fp);// 讀取第二行
  21.                 while (fgets(mode, sizeof(mode), fp) != NULL) {
  22.                         test(mode);
  23.                 }
  24.         }
  25.         fclose(fp);
  26. }

  27. void test(char* str)
  28. {
  29.         char* h;
  30.         int num = 0;
  31.         int flag = 0;
  32.         for (h = str; *h != '\0'; h++) {
  33.                 if (*h >= '0' && *h <= '9') {
  34.                         num = num * 10 + (*h - '0');
  35.                         flag = 1;
  36.                 }
  37.                 else if (flag) {
  38.                         printf("num: %d\n", num);
  39.                         num = 0;
  40.                         flag = 0;
  41.                 }
  42.         }
  43. }
複製代碼





歡迎光臨 冰楓論壇 (https://bingfong.com/) Powered by 冰楓