2011-07-26 44 views
0

我已经搜索过该网站,并且我还没有找到对我的问题的答案。在for循环中使用C的fwrite

我的程序输出一个图像,我想保存到一个不同的文件,循环迭代后生成的每个图像。

我的代码保存文件是这样的

FILE *fobjecto; 
if ((fobjecto = fopen ("OSEM.ima", "wb")) != NULL)     
{ 
    printf("Writing reconstructed image file"); 
    fwrite (objecto, sizeof(float), (detectorXDim)*detectorYDim*(NSlices-1), fobjecto);  
    fclose (fobjecto);  
}  
else  
    printf("Reconstructed image file could not be saved"); 

我想一个整型变量添加到输出文件的名字,我试图用“+”和玩“”但我不解决这个问题。

在此先感谢

+0

这个数字有多大? – vsz

回答

6

你需要像sprintf一些格式化输出操作(甚至更好的安全双snprintf):

char buf[512]; // something big enough to hold the filename 
unsigned int counter; 
FILE * fobjecto; 

for (counter = 0; ; ++counter) 
{ 
    snprintf(buf, 512, "OSEM_%04u.ima", counter); 

    if ((fobjecto = fopen(buf, "wb")) != NULL) { /* ... etc. ... */ } 

    // Filenames are OSEM_0000.ima, OSEM_0001.ima, etc. 
} 
+1

对于不超过20个字符的东西,1000有点大。 –

+0

你刚到那里:)但你可能想修复'fopen'行... – MByD

+1

好吧OK ... :-) –

5
char file_name[256]; 

sprintf(file_name, "OSEM%4.4d.ima", iteration_count); 

if (NULL!=(fobjecto=fopen(file_name, "wb"))) 
    // ... 
2

构建的文件名,你打开它之前:

char filename[256]; 
//... 
sprintf(filename, "OSEM%08X.ima", someIntegerToAddAsHex); 
if ((fobjecto = fopen (filename, "wb")) != NULL)  
//...