我正在尝试将程序中打印的所有内容作为输出写入名为" 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();
}
这些是编译器告诉我的错误:&#39; Code Final.exe&#39;:已加载&#39; C:\ Users \ Qsmrf \ Documents \ Visual Studio 2010 \ Projects \ qasimproject \ Code Final \ Code Final \ Debug \ Code Final.exe&#39;,符号已加载。
&#39; Code Final.exe&#39;:已加载&#39; C:\ Windows \ System32 \ ntdll.dll&#39;,无法找到或打开PDB文件
&#39; Code Final.exe&#39;:已加载&#39; C:\ Windows \ System32 \ kernel32.dll&#39;,无法找到或打开PDB文件
&#39; Code Final.exe&#39;:已加载&#39; C:\ Windows \ System32 \ KernelBase.dll&#39;,无法找到或打开PDB文件
&#39; Code Final.exe&#39 ;:已加载&#39; C:\ Windows \ System32 \ msvcr100d.dll&#39;,已加载符号。
程序&#39; [3256] Code Final.exe:Native&#39;已退出代码0(0x0)。
答案 0 :(得分:2)
这是因为您没有向fp
写任何内容。而不是fprintf(stderr,"Item name:")
,使用类似
fprintf(fp,"Item name:");
同时确保文件成功打开并仅在最后关闭它。
答案 1 :(得分:1)
int fprintf(FILE *stream, const char *format, ...)
该流应该是您要将数据写入的文件。这是fp
但我们没有看到任何内容写入您的文件。喜欢
fprintf(fp,"price");
答案 2 :(得分:1)
这里不止一件事需要注意。
将void main()
更改为int main()
,最后添加return 0
。
将结构定义移到main()
之外,并且可以移动到您可以包含的某个头文件中。好的做法。
p = fopen( "abcd.txt", "w+" );
之后,检查fopen()
是否成功。如果成功,则使用fp
。
fprintf(stderr,"price:");
这会将您的所有输出数据重定向到stderr
,而不是fp
。如果您希望将输出放在指定的文件中,请将stderr
更改为fp
。
读取数据后,使用fprintf(fp, ...);
将数据输出(写入)到文件。 [这一点有点冗余到第4点。]
您有多个fclose(fp);
。删除所有其他[存在于循环中]并保留在结束之前[可能的return
语句。]
答案 3 :(得分:0)
fprintf(fp, "abcd");
而不是fprintf(stderr, "adcd");
答案 4 :(得分:0)
因为您没有将文件指针用于该对应文件。然后用w +打开它会截断其中的内容。
然后使用fp to wrte in file而不是stderr。然后你两次使用fclose。
fprintf(stderr," ***** INVENTORY *****\n");
从这一行开始,你必须使用fp存储在文件而不是stderr。