全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1661
推到 Plurk!
推到 Facebook!

用printf 表矩陣,值跑掉了

尚未結案
keys
一般會員


發表:2
回覆:3
積分:1
註冊:2005-06-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-10 19:02:23 IP:203.67.xxx.xxx 未訂閱
各位大大好    今天小弟有個矩陣相乘的程式,是由兩個TXT檔(MatrixA.txt和MatrixB.txt)輸入矩陣,判別後再相乘,得一矩陣TXT黨(MatrixC.txt)    然後先說明我的問題    我為了要排的整齊,所以用了printf指令    但是,其中有些值會偏掉,不知道是否是因為printf指令了關係    小弟給了一些範本,和矩陣例子  讓大大們方便下載(內含A,B,C矩陣TXT黨,和    兩個C++黨:019(沒有用printf寫的)是沒問題的,019re(是用printf寫的)是有    問題的)        還有Code也給大家看看    希望大大能幫個忙    code     
#include 
#include 
using namespace std;
int main()
{
    cout << "Inputing matrixA.txt, matrixB.txt and outputing the matrixC.txt" << endl;
    ifstream AA("matrixA.txt"),BB("matrixB.txt");
    FILE *CC;//要使用fprintf ,ofstream就無法使用 
        //要由兩矩陣的行列判別是否可相乘,在此讀入行列數
    int n,m,p,q;
    char buffer[100];
    float C;
    for(n=0;AA.getline(buffer,100);++n);
    AA.close();AA.clear();AA.open("matrixA.txt",ios::in); 
    for(m=0;AA >> buffer;++m);
    m=m/n;
    for(p=0;BB.getline(buffer,100);++p);
    BB.close();BB.clear();BB.open("matrixB.txt",ios::in); 
    for(q=0;BB >> buffer;++q);
    q=q/p;
    cout << "n=" << n << endl << "m=" << m <    我自己在檢查時    用Cout出每個值    發覺有一些矩陣裡某些值會跳掉變成一個奇怪的數~ ~    麻煩你們嚕    檔案下載
http://www.yourfilehost.com/media.php?cat=other&file=019.rar 
     
        
Royce520
高階會員


發表:18
回覆:157
積分:100
註冊:2002-09-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-11 11:10:42 IP:210.243.xxx.xxx 未訂閱
dear keys,   大致上看了一下, 我覺得可能是 printf 引起的   (a) 因為你宣告 C 是 float 型別的變數   (b) 但是你想要這樣輸出 fprintf(CC,"%5d",C),       其實 printf 系列的函數是一些特殊的函數...       有所謂的 變動引數串列(variable-length       argument list)的設計在其中. 你可以去查相關       資料. 因此你的格式字串(也就是"%5d")要跟後面       要使用的的變數型別相符(C), 不然他會解釋錯誤       你就會得到莫名其妙的輸出.   (c) 因此, 建議你改成 fprintf(CC,"%8.3f",C) 這樣        *真實的事物最美, 簡單的道理最好, 我能體會的 太少*
------
不要忘記呼吸,不要忘記編程! ∩__∩
keys
一般會員


發表:2
回覆:3
積分:1
註冊:2005-06-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-12 08:34:14 IP:203.67.xxx.xxx 未訂閱
恩 我發現問題了  
 //
儲矩陣裡的值
          for(int j=0,k=0;AA >> A[j][k];k  ){if(k-1==m){k=-1;j  ;};cout << A[j][k] << endl;}
          for(j=0,k=0;BB >> B[j][k];k  ){if(k-1==q){k=-1;j  ;};cout << B[j][k] << endl;} 
改成
 //
儲矩陣裡的值
          for(i=0,j=0,k=0;k> A[i][j];cout << A[i][j] << endl;
                          if(j==m-1){j=-1;i  ;}
                  }
                  for(i=0,j=0,k=0;k> B[i][j];cout << B[i][j] << endl;
                          if(j==q-1){j=-1;i  ;}
                  }
這是完整的code
 
#include 
#include 
using namespace std;
int main()
{
    cout << "Inputing matrixA.txt, matrixB.txt and outputing the matrixC.txt" << endl;
    ifstream AA("matrixA.txt"),BB("matrixB.txt");
    FILE *CC;//要使用fprintf 輸入TXT黨,ofstream就無法使用 
        //要由兩矩陣的行列判別是否可相乘,在此讀入行列數
    int n,m,p,q,i,j,k,l;
    char buffer[100];
    float C;
    for(n=0;AA.getline(buffer,100);  n);
    AA.close();AA.clear();AA.open("matrixA.txt",ios::in); 
    for(m=0;AA >> buffer;  m);
    m=m/n;
    for(p=0;BB.getline(buffer,100);  p);
    BB.close();BB.clear();BB.open("matrixB.txt",ios::in); 
    for(q=0;BB >> buffer;  q);
    q=q/p;
    cout << "n=" << n << endl << "m=" << m <> A[i][j];cout << A[i][j] << endl;
                          if(j==m-1){j=-1;i  ;}
                  }
                  for(i=0,j=0,k=0;k> B[i][j];cout << B[i][j] << endl;
                          if(j==q-1){j=-1;i  ;}
                  }
                  //相乘後直接用printf輸出到一個文件檔matrixC
                  CC = fopen ("matrixC.txt","w");
          for(i=0,j=0,k=0;i
雖然說知道問題出在
儲值的方法
但是有人可以解釋為何我原來的儲值方法
會使的一些輸入值跳掉成別的值
拜託各位大大了    還有感謝Royce520提供的修正     
        
系統時間:2024-05-10 19:18:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!