2013-03-18 81 views
0

我試圖在Xcode中的C++中使用fprintf輸出以用於物理項目。以前我在PC上使用Turbo C++,並且沒有類似輸出的問題,正如我在下面寫到的那樣...我試圖將數據發送到.csv文件以便在xcel中創建圖表/圖表,但調試器HATES我嘗試的輸出。有人可以幫助我,告訴我如何將輸出從xcode發送到xcel或mac的數字程序嗎?我的代碼有什麼問題?感謝我在我的最後!在XCode中存在fprintf C的問題

#include <iostream> 
#include <stdio.h> 
#include <math.h> 
#include <stdlib.h> 
#include <time.h> 

int main() 
{ 
    int ia,ja,ib=1,jb=1,n=1,t=1; 
    float Ia[25],Ja[25],C[25][25],Wbb[25][25]; 
    float xl[25][25],xr[25][25],Pr[25][25],Nr[25][25]; 
    float max,r1,H=0; 

    max=RAND_MAX; 
    FILE * Project1; 
    Project1 = fopen ("Users/Dave/Desktop/Project1.csv","w"); 

    Ia[n]=3; 
    Ja[n]=3; 
    for(t=1;t<100;++t) //time step counter 
    { 
     n=1; 
     for(n=1;n<26;++n) //# of states to look at 
     { 
      ia=Ia[n]; 
      ja=Ja[n]; 
      ib=1; 

      for(ib=1;ib<6;++ib) //determine I[n]'s C[ia][ja] values (initially will be the same due to ICs) 
      { 
       jb=1; 
       for(jb=1;jb<6;++jb) 
       { 
        C[ia][ja]=100*(ia-ib)^2+100*(ja-jb)^2+1; 
       } 
      } 
      fprintf(Project1, "%d,%d,%d,%f\n",n,ia,ja,C[ia][ja]); 

      ib=1; 
      for(ib=1;ib<6;++ib) //determine Wsrs and delta x's for each system I[n] { 
      { 
       jb=1; 
       for(jb=1;jb<6;++jb) 
       { 
        Wbb[ib][jb]=C[ia][ja]/((100)*(ia-ib)^2+100*(ja-jb)^2+1); 
        xl[1][1]=0; 
        xr[ib][jb]=xl[ib][jb]+Wbb[ib][jb]; 
        fprintf(Project1,"%d,%d,%f,%f,%f",ib,jb,Wbb[ib][jb],xl[ib][jb],xr[ib][jb]); 
        xl[ib][jb+1]=xr[ib][jb]; 
       } 
      } 

      r1=rand()/max; //randomly select new state and determine it's ib,jb value and reassign to new ia, ja at next time step 
      ib=1; 
      for(ib=1;ib<6;++ib) 
      { 
       jb=1; 
       for(jb=1;jb<6;++jb) 
       { 
        if(r1<xr[ib][jb] & r1>xl[ib][jb]) 
         Nr[ib][jb]++; 
        Ia[n]=ib; 
        Ja[n]=jb; 
       } 
      } 
     } 

     ib=1; 
     for(ib=1;ib<6;++ib) 
     { 
      jb=1; 
      for(jb=1;jb<6;++jb) 
      { 
       Pr[ib][jb]=Nr[ib][jb]/25; 
       H=Pr[ib][jb]*log(Pr[ib][jb])+H; //Compute Total Entropy Function of all systems by adding each systems entropy 
      } 
     } 

     fprintf(Project1,"%f",H); //print out the Entropy at each time step 
    } 
} 
+0

我不明白這個問題。 – trojanfoe 2013-03-18 00:56:45

+1

這看起來像FORTRAN翻譯成C :)。一個嚴重的問題是:'Wbb [ib] [jb] = C [ia] [ja] /((100)*(ia-ib)^ 2 + 100 *(ja-jb)^ 2 + 1) C/C++沒有「^」「power-of」運算符。您需要替換「exp()」數學函數。以下是[C/C++運算符]的列表(http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V40F_HTML/AQTLTBTE/DOCU_059.HTM)。 – paulsm4 2013-03-18 00:59:45

+0

@ paulsm4我同意這個觀點,因此懷疑這個說法的正確性*「以前我在PC上使用過Turbo C++,沒有類似輸出的問題,就像我在下面寫到的一樣......」*甚至沒有Turbo C++不足以將XOR運算符覆蓋爲「指數」運算符。 – WhozCraig 2013-03-18 01:06:17

回答

1

所以有幾個問題,在這裏,我看到,在這一行,你使用了錯誤的報價:

Project1 = fopen (「Users/Dave/Desktop/Project1.csv」,」w」); 

應該是:

Project1 = fopen ("Users/Dave/Desktop/Project1.csv","w"); 

正如有人指出C++沒有power運營商,^bitwise exclusive or,您需要使用pow函數來代替,所以此行:

C[ia][ja]=100*(ia-ib)^2+100*(ja-jb)^2+1; 

是:

C[ia][ja]=100*pow((ia-ib),2)+100*pow((ja-jb),2)+1; 

另外,&經營者爲bitwise and,並在以下方面,我認爲你的意思&&這是一個logical and,在這種情況下,他們會做同樣的事情,但:

if(r1<xr[ib][jb] & r1>xl[ib][jb]) 

此外,如果你是使用C++開發我會使用C++的頭文件的版本:

#include <cstdio> 
#include <cmath> 
#include <cstdlib> 
#include <ctime> 
+0

感謝您的幫助!是的,exp的東西是從mathematica中遺留下來的,因爲我不得不在旅行中用word文檔寫出它。它現在在構建中成功,但在運行時仍然存在問題... – dcman 2013-03-18 02:08:48