使用fprintf的问题

时间:2011-03-16 23:44:12

标签: c file printf

我正在尝试将多个变量打印到文本文件但它不起作用。 我检查并验证我是用正确的语法编写的。 我还检查了返回值并且它是肯定的,因此我知道它确实写入了文件,但是当我打开文件时它是空的。

我很乐意提供一些帮助。 这是代码:

我在主要发起DynsaleDayPtr:

FILE* DynsaleDayPtr = CreateTextFiles("sale_day.txt");  

创建功能:

FILE* CreateTextFiles (char* fileName)  
{  
    FILE* saleFilePtr=NULL;  

    if((saleFilePtr=fopen(fileName,"a+"))==NULL)  
        printf("File couldn't be opened\n");  
    return saleFilePtr;  
}  

对函数TextAddSale的调用是通过在main中调用的函数完成的:
TextAddSale(DynSaleDayPtr,dynNumOfRecords);

Bool TextAddSale (FILE* DynsaleDayPtr, int* dynNumOfRecords)  
{  

    char id[6];  
    char name [50];  
    char priceChar[20];  
    char* tmp = NULL;  
    int price=-1;  
    DynamicRecord * newRec=NULL;  

    scanf("%s%s%s",id,name,priceChar);

    newRec = (DynamicRecord *)malloc(sizeof(DynamicRecord));  
    if (newRec == NULL)  
        return False;  
    tmp = (char*)malloc(strlen(name)+1);  
    if (tmp == NULL)  
    {  
        free (newRec);  
        return False;  
    }  
    strcpy(tmp,name);  
    newRec->productName = tmp;  
    strcpy(newRec->productId, id);  
    newRec->productPrice=atoi (priceChar);  

    if (fprintf(DynsaleDayPtr,"%d %s %s %d", strlen(newRec->productName),  
    newRec->productId, newRec->productName, newRec->productPrice)>0)  
    {  
        *dynNumOfRecords=(*dynNumOfRecords)+1;  
        return True;  
    }  
}

谢谢!

4 个答案:

答案 0 :(得分:1)

您需要刷新流。

fflush(FILE*);

当然,如果你已经完成了它,你必须关闭流。

fclose(FILE*);

答案 1 :(得分:0)

同意@pmg - 尝试这样的事情:

FILE *pFile = fopen("foo.txt","w");
if (pFile==NULL)
   bad();
fprintf(pfile,"Hello world\n");
fclose(pfile);

首先让它工作 - 然后解决大应用程序中的错误 -

答案 2 :(得分:0)

一个想法:

scanf("%s%s%s",id,name,priceChar);

上面的说法有点狡猾,因为你还没说多少字节 应该进入每个字符串。

最好使用fgets()然后解析检索各个值的字符串 或者创建一个更好的格式说明符。

如果上述语句导致内存覆盖了程序的其余部分 可能导致故障,导致你所描述的事情。

答案 3 :(得分:0)

fprintf()最有可能使用缓冲输出。因此,您应该fflush() DynSaleDayPtr流,或者更好的是,在文件中打印换行符。后者具有使文件内容实际可读的额外好处......

此外,当您完成写作时,不要忘记close()流。这也将使fflush()变得不必要。