[英]Can someone tell me what i am doing wrong in this C program?
我试图将所有打印在程序中的内容作为输出写入到名为“ abcd.txt”的文件中,每当我运行该程序时,它运行良好并退出,但文件“ abcd.txt”中没有任何书面内容。
void main()
{
struct date
{
int day;
int month;
int year;
};
struct details
{
char name[20];
int price;
int code;
int qty;
struct date mfg;
};
struct details item[50];
int n,i;
FILE *fp;
getch();
fprintf(stderr,"Enter number of items:");
scanf("%d",&n);
fflush(stdin);
fp = fopen( "abcd.txt", "w+" ); // Open file for writing
for(i=0;i<n;i++)
{
fflush(stdin);
fprintf(stderr,"Item name:");
scanf("%[^\n]",item[i].name);
fflush(stdin);
fprintf(stderr,"Item code:");
scanf("%d",&item[i].code);
fflush(stdin);
fprintf(stderr,"Quantity:");
scanf("%d",&item[i].qty);
fflush(stdin);
fprintf(stderr,"price:");
scanf("%d",&item[i].price);
fflush(stdin);
fprintf(stderr,"Manufacturing date(dd-mm-yyyy):");
scanf("%d-%d-%d",&item[i].mfg.day,&item[i].mfg.month,&item[i].mfg.year);
fclose(fp);
}
fprintf(stderr," ***** INVENTORY *****\n");
fprintf(stderr,"------------------------------------------------------------------\n");
fprintf(stderr,"S.N.| NAME | CODE | QUANTITY | PRICE |MFG.DATE\n");
fprintf(stderr,"------------------------------------------------------------------\n");
for(i=0;i<n;i++)
fprintf(stderr,"%d %-15s %-d %-5d %-5d %d/%d/%d\n",i+1,item[i].name,item[i].code,item[i].qty,item[i].price,
item[i].mfg.day,item[i].mfg.month,item[i].mfg.year);
fprintf(stderr,"------------------------------------------------------------------\n");
fclose(fp);
getch();
}
这些是编译器告诉我的错误:'Code Final.exe':已加载'C:\\ Users \\ Qsmrf \\ Documents \\ Visual Studio 2010 \\ Projects \\ qasimproject \\ Code Final \\ Code Final \\ Debug \\ Code Final.exe',符号已加载。
'代码Final.exe':已加载'C:\\ Windows \\ System32 \\ ntdll.dll',找不到或打开PDB文件
'代码Final.exe':已加载'C:\\ Windows \\ System32 \\ kernel32.dll',找不到或打开PDB文件
'代码Final.exe':已加载'C:\\ Windows \\ System32 \\ KernelBase.dll',无法找到或打开PDB文件
'代码Final.exe':已加载'C:\\ Windows \\ System32 \\ msvcr100d.dll',已加载符号。
程序“ [3256]代码Final.exe:本机”已退出,代码为0(0x0)。
这是因为您没有向fp
写任何东西。 代替fprintf(stderr,"Item name:")
,使用类似
fprintf(fp,"Item name:");
还要确保文件成功打开,并仅在最后关闭它。
int fprintf(FILE *stream, const char *format, ...)
流应该是要向其写入数据的文件。 这是fp
但我们看不到任何内容写入您的文件。
fprintf(fp,"price");
这里要注意的不止一件事。
将void main()
更改为int main()
,并在末尾添加return 0
。
将结构定义移到main()
外部,并且可以移到可以包含的某些头文件中。 好的做法。
p = fopen( "abcd.txt", "w+" );
之后,检查fopen()
是否成功。 如果成功,则使用fp
。
fprintf(stderr,"price:");
这会将您的所有输出数据重定向到stderr
,而不重定向到fp
。 如果要将输出放置在指定文件中,请用fp
更改stderr
。
读取数据后,使用fprintf(fp, ...);
将数据输出(写入)到文件。 [这一点对第4点来说是多余的。 ]
您有多个fclose(fp);
。 删除所有其他[存在于循环中],并保留在结束[可能的return
语句]之前的一个。
fprintf(fp, "abcd");
不是fprintf(stderr, "adcd");
因为您没有使用该相应文件的文件指针。 然后使用w +打开它,它将截断其中的内容。
然后使用fp而不是stderr写入文件。 然后,您将两次使用fclose。
fprintf(stderr," ***** INVENTORY *****\n");
在这一行中,您必须使用fp而不是stderr来存储在文件中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.