输出到C中的文本的奇怪问题

时间:2011-11-17 10:50:08

标签: c

这个错误让我疯了。请帮忙。代码在终端和代码块IDE中的gcc中编译。我正在使用Linux和C.它编译并运行,但第二个文本文件“onlydata.txt”中没有输出。

#include <stdlib.h>
#include <stdio.h>

/*          Data Looks Like This...
E1 101223 9.2
E1 120231 8.4
E2 121212 400.2
            I need this....
          9.2
          8.4
 */

struct Data
{
 char        *specimen;
 int           date;
 double        result;
};

int main()
{
 char szBuffer[256];
 unsigned int iCt=0;
 Data* pData=NULL;
 FILE* fpIn=NULL;

 fpIn=fopen("data.txt","r");  //Open "Data.dat for read "r" access.
 if(fpIn)                     //and loop through data to count lines.
 {                            //in iCt
    while(!feof(fpIn))
    {
       fgets(szBuffer,256,fpIn);
       iCt++;
    }
    fclose(fpIn);
 }
 printf("iCt = %d\n\n",iCt);             //Allocate a buffer of Data type
 pData=(Data*)malloc(iCt*sizeof(Data));  //to hold iCt objects
 if(pData)
 {
    fpIn=fopen("Data.txt","r");  //Open "Data.dat for read "r" access.
    if(fpIn)          FILE *fp=NULL;

    {
       iCt=0;
       while(!feof(fpIn))      //read data from text file into buffer
       {
          fscanf(fpIn,"%s%i%f",
          &pData[iCt].specimen,
          &pData[iCt].date,
          &pData[iCt].result);

         // printf("%10.2f\t%4.2f\t%f\t%f\t%f\t%u\t%4.2f\n",
         // pData[iCt].specimen,
         // pData[iCt].date,
         // pData[iCt].result,

          iCt++;
          FILE *np=NULL;
        np = fopen("onlydata.txt","w");
        if(np)
         fprintf (np," ", &pData[iCt].result);
         fclose(np);
       }
       fclose(fpIn);
    }
    free(pData);
 }
 getchar();

 return 0;
}

4 个答案:

答案 0 :(得分:3)

Linux文件名区分大小写。如果文件名为“data.txt”,则第二个fopen()将失败。

答案 1 :(得分:1)

在打开源文件的同时,您应该只打开一次目标文件。

现在,对于源文件的每一行,您打开目标,截断它,然后写一行。最后,目标文件中只有一行(最后一行)。

此外,您的fprintf只会写一个空格字符:您的格式字符串应为"%f"或至少包含一个%f。实际上,未使用参数&pData[iCt].result

另请注意,此参数不应按地址传递,而应按值传递:(删除&)。

答案 2 :(得分:1)

你需要在你的fprintf中有结果的说明符,没有说明符它只是在文件中写入空格

答案 3 :(得分:1)

您遇到的实际问题来自以下几行:

fprintf (np," ", &pData[iCt].result);

它只是向文件输出一个空格。我想你忘记了%f

编辑错过了Didier Trosset指出的其他明显错误。 :)