2011-08-27 71 views
0

我有以下代碼:C/C++流和文件

int checkCorrectness(int i,char *iStr) 
{ 
    if(atoi(iStr) == i) 
    return 1; 
    return 0; 
} 
void foo(int i) 
{ 
    printf("inside foo %d\n",i); 
} 
void print() 
{ 
    char mystring[100]; 
    freopen("myfile.txt","w+",stdout); 
    for(int i =0;i < 100;++i) 
    { 
     foo(i); 
     FILE *f = fopen("myfile.txt","r"); 
     if (f == NULL) perror ("Error opening file"); 
     else { 
     while (fgets (mystring , 100 , f) != NULL); 
     if(!checkCorrectness(i,mystring); 
      break; 
     fclose (f); 

     } 
    } 
    fclose(stdout); 
} 

這段代碼保存我的意思是它確定的fopen調用freopen函數被調用其流沒有關閉後?謝謝

+1

爲什麼你在C++中使用C文件函數...... 你也應該使用字符串對象,而不是直接作用於內存 – Prime

回答

0

你的代碼看起來很安全。您可以在一個過程中多次打開同一個文件。文件描述符不會相互影響。

我會像你一樣避開重啓標準輸出。你可以用一個fopen來完成整個程序,並避免你創建的混亂:查找fprintf!

+0

我知道但我必須使用printf!問題是如果打開和關閉myfile.txt將允許printf繼續寫入myfile並且不會在流中產生混亂 – Yakov

+0

您做到這一點的方式是令人討厭的。你爲什麼只允許使用prinf?家庭作業問題?而且,「f」完全獨立於「標準輸出」,所以是的,你可以做到這一點。你不應該那樣做,但你可以。 –