C作業問題求助
本帖最後由 呂晨 於 2021-9-7 12:06 編輯要用fopen來讀txt檔來確認要進行矩陣轉置或是矩陣相乘
並且在程式內完成轉置或相乘,並不用輸出到新的txt檔裡面,只要顯示在小黑窗就好
第三張圖是我的程式碼,以及輸出結果
問題一:讀檔只會讀第一行並不會往下繼續讀
問題二:要如何把字串中的數字抓出來 本帖最後由 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 執行結果
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;
}
}
} 呂晨 發表於 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]