2012-11-18 16 views
0

昨天我太累了,無法發佈正確和具體的問題。所以那裏是:如何將數據導出爲GNUplot可讀的.txt

if (t==2){ 
    printf ("abc\n"); 
    printf ("abc = "); scanf ("%f",&r); 
    printf ("abc = "); scanf ("%d",&n); 
    printf ("abc = "); scanf ("%d",&k); 
    a=2*r; 
    b=2*r; 
    c=2*r; 

    for (i=0;i<=n;i++){ 
     float x=(float)rand()/((float)RAND_MAX/a); 
     float y=(float)rand()/((float)RAND_MAX/b); 
     float z=(float)rand()/((float)RAND_MAX/c); 

     if ((x-(r))*(x-(r))+(y-(r))*(y-(r))+(z-(r))*(z-(r))<=(r*r)) 
      m++; 

      if (i % k ==0 && i > 0){ 
       freopen ("data.txt","w", stdout); 
       printf("%s %s  %s \n","#","n","Vka"); 
       Vka = (2*r*2*r*2*r)*m/i; 
       printf("% 6.2f % 6.2f \n",n,Vka); 
       fclose (stdout); 
      } 

    } 

    Vk=(2*r*2*r*2*r)*m/n; 
    printf ("abc =%d\n", m); 
    printf ("abc=%d\n", n); 
    printf("abc =%f", Vk); 

    } 

不幸的是,程序不工作,因爲我希望它的工作。它應該將數據導出到文件「data.txt中」,但該文件仍然是這樣的:

# n  Vka 
0.00 0.00 

Morover程序剛剛創建此文件後完成操作,同時我希望它在完成打印其操作Vk在終端。

+3

不要重新打開'stdout'!相反,打開一個新文件,並使用'fprintf'打印。另外,當您在循環中打開文件時,您_overwrite_現有的文件。此外,你在一個格式字符串中的百分比和格式規範之間有空格,這不會起作用。 –

回答

1
  1. 打開文件循環之前
  2. 寫入使用fprintf
  3. 關閉文件迴路

沒有理由在這個節目惹stdout在後循環內的文件所有。

0

使用的open()系統調用打開文件write.txt並將其分配給FD,說fdout。然後使用dup2(fdout, 1)進行標準輸出。

您在默認情況下3開高清預文件描述符,在你的操作系統,你甚至能達到main前:
0分配給標準輸入, 1到stdout, 2到stderr。

dup2手冊頁:

dup2(int oldfd, int newfd)使得newfd是的oldfd副本,收盤newfd第一,如果必要的。

dup2調用用您打開的文件write.txt替換stdout。因此,當您將printf的數據寫入stdout時,它將被寫入您的文件,而不是由操作系統預定義的fd設置。

這不僅會讓你的工作完成,stdout的開啓和關閉不再是你的頭痛。