这个错误让我疯了。请帮忙。代码在终端和代码块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;
}
答案 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指出的其他明显错误。 :)