呂晨 發表於 2021-9-7 12:04:25

C作業問題求助

本帖最後由 呂晨 於 2021-9-7 12:06 編輯

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

love6610716 發表於 2021-9-7 13:17:38

本帖最後由 love6610716 於 2021-9-7 13:22 編輯

行 24, 25 只有執行一次所以你才只有讀取一行
常用的讀檔方式
while( !feof( fp ) )
{
        // fscanf, print
}
字串中讀取數字
逐char讀取只要是數字就加總起來就可以
void test(char* str){
    char * h; // first copy the pointer to not change the original
    int num = 0;
    int flag = 0;
    for (h = str; *h != '\0'; h++) {
        if(*h >= '0' && *h <= '9'){
            num = num*10 + (*h-'0');
            flag = 1;
        }else if(flag){
            printf("num: %d\n", num);
            num = 0;
            flag = 0;
        }
    }

}
至於 test 中甚麼要加 flag 你可以測試把 flag 刪掉後執行的結果差異
test 執行結果


呂晨 發表於 2021-9-7 14:55:35

love6610716 發表於 2021-9-7 13:17 static/image/common/back.gif
行 24, 25 只有執行一次所以你才只有讀取一行
常用的讀檔方式字串中讀取數字
逐char讀取只要是數字就加總起 ...
不知道我哪裡做錯了
讀取input01.txt檔後的結果只有3、6、9C:\Users\luluchen\Desktop\3.PNG#include<stdio.h>
#include<stdlib.h>
#pragma warning( disable : 4996 )

void test(char* str);

int main()
{
        int a;
        char name;
        char mode;

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

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

        if (fp == NULL)
        {
                printf("error");
                return 0;
        }

        fscanf(fp, "%s", &mode);
        if (mode == 'T')
        {
                while (!feof(fp)) {
                        fscanf(fp, "%s", &mode);
                        test(mode);
                }
        }
        fclose(fp);
}

void test(char* str)
{
        char* h;
        int num = 0;
        int flag = 0;
        for (h = str; *h != '\0'; h++) {
                if (*h >= '0' && *h <= '9') {
                        num = num * 10 + (*h - '0');
                        flag = 1;
                }
                else if (flag) {
                        printf("num: %d\n", num);
                        num = 0;
                        flag = 0;
                }
        }
}

love6610716 發表於 2021-9-7 18:38:36

呂晨 發表於 2021-9-7 14:55 static/image/common/back.gif
不知道我哪裡做錯了
讀取input01.txt檔後的結果只有3、6、9

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

void test(char* str);

int main()
{
        int a;
        char name;
        char mode;

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

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

        if (fp == NULL)
        {
                printf("error");
                return 0;
        }

        fgets(mode, sizeof(mode), fp);
        if (mode == 'T'){
                fgets(mode, sizeof(mode), fp);// 讀取第二行
                while (fgets(mode, sizeof(mode), fp) != NULL) {
                        test(mode);
                }
        }
        fclose(fp);
}

void test(char* str)
{
        char* h;
        int num = 0;
        int flag = 0;
        for (h = str; *h != '\0'; h++) {
                if (*h >= '0' && *h <= '9') {
                        num = num * 10 + (*h - '0');
                        flag = 1;
                }
                else if (flag) {
                        printf("num: %d\n", num);
                        num = 0;
                        flag = 0;
                }
        }
}
頁: [1]
查看完整版本: C作業問題求助