上次我使用此代码时,它工作正常。我希望将输出保存到文本文件中(通过fprintf()
打印的任何内容)。现在,当我尝试再次运行代码时,它不会将输出保存在给定的文本文件draftday.txt
中。任何帮助将不胜感激。
#include <stdio.h>
#include <conio.h>
#include <cstdlib>
int main()
{
struct date
{
int day;
int month;
int year;
};
struct details
{
char name[50];
int price;
int code;
int qty;
struct date mfg;
};
struct details item[50];
int n,i;
getch();
fflush(stdin);
printf("Enter number of items:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
fflush(stdin);
printf("Item name:");
scanf("%[^\n]",item[i].name);
fflush(stdin);
printf("Item code:");
scanf("%d",&item[i].code);
fflush(stdin);
printf("Quantity:");
scanf("%d",&item[i].qty);
fflush(stdin);
printf("price:");
scanf("%d",&item[i].price);
fflush(stdin);
printf("Manufacturing date(dd-mm-yyyy):");
scanf("%d-%d-%d",&item[i].mfg.day,&item[i].mfg.month,&item[i].mfg.year);
}
{
FILE *fptr;
fptr=(fopen("draftday.txt","w"));
if(fptr==NULL){
printf("Error!");
exit(1);
}
fprintf(fptr," ***** INVENTORY *****\n\n\n"
"------------------------------------------------------------------\n\n"
"S.N.| NAME | CODE | QUANTITY | PRICE |MFG.DATE\n\n"
"------------------------------------------------------------------\n\n");
for(i=0;i<n;i++){
fprintf(fptr, "%d %-15s %-d %-5d %-5d %d/%d/%d\n",i,item[i].name,item[i].code,item[i].qty,item[i].price,
item[i].mfg.day,item[i].mfg.month,item[i].mfg.year);
}
fclose(fptr);
getch();
}
}
答案 0 :(得分:0)
我想你忘记了for
循环:
fprintf(fptr, "%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);
尝试:
for(i=0;i<n;i++)
{
fprintf(fptr, "%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);
}
此外,您正在追加模式下打开输出文件。我不确定你是否打算这样做。如果没有,请更改
fptr=(fopen("draftday.txt","a"));
到
fptr=(fopen("draftday.txt","w"));
答案 1 :(得分:0)
这里有两点需要注意:
您正在阅读n
个项目,但只写n+1
项,这完全无效。
您从未检查scanf()
的返回值以确保成功。
要更正:
for
循环条件。fclose()
文件。fopen()
部分移到建议的for
循环之外。编辑:
在linux上,下面的代码可以正常工作。
#include <stdio.h>
#include <stdlib.h>
struct date
{
int day;
int month;
int year;
};
struct details
{
char name[50];
int price;
int code;
int qty;
struct date mfg;
};
int main()
{
struct details item[50];
int n,i;
printf("Enter number of items:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
getchar();
printf("Item name:");
scanf("%[^\n]",item[i].name);
printf("Item code:");
scanf("%d",&item[i].code);
printf("Quantity:");
scanf("%d",&item[i].qty);
printf("price:");
scanf("%d",&item[i].price);
printf("Manufacturing date(dd-mm-yyyy):");
scanf("%d-%d-%d",&item[i].mfg.day,&item[i].mfg.month,&item[i].mfg.year);
}
{
FILE *fptr;
fptr=(fopen("draftday.txt","a"));
if(fptr==NULL){
printf("Error!");
exit(1);}
fprintf(fptr," ***** INVENTORY *****\n\n\n"
"------------------------------------------------------------------\n\n"
"S.N.| NAME | CODE | QUANTITY | PRICE |MFG.DATE\n\n"
"------------------------------------------------------------------\n\n");
for(i=0;i<n;i++)
fprintf(fptr, "%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);
fclose(fptr);
}
}
答案 2 :(得分:0)
数据不存储在结构本身中。 将数据存储在文件中时,必须给出循环以存储数组中每个位置的所有数据。 只有这样,数据才会从该位置获取并存储在文件中。
试试这个:
for (i = 0 ; i < n ; i ++) {
fprintf(fptr, "%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);
}
如果你想澄清打印结构中的数据。
答案 3 :(得分:0)
我对您的代码进行了一些更改。试试这个。确保您的文件位于当前目录中。或者给出完整的路径名称。
#include <stdio.h>
#include <stdlib.h>
int main()
{
struct date
{
int day;
int month;
int year;
};
struct details
{
char name[50];
int price;
int code;
int qty;
struct date mfg;
};
struct details item[50];
int n,i;
printf("Enter number of items:");
scanf("%d",&n);
FILE *fptr;
fptr=(fopen("draftday.txt","a"));
if(fptr==NULL){
printf("Error!");
exit(1);}
fprintf(fptr," ***** INVENTORY *****\n\n\n""------------------------------------------------------------------\n\n""S.N.| NAME | CODE | QUANTITY | PRICE |MFG.DATE\n\n""------------------------------------------------------------------\n\n");
for(i=0;i<n;i++)
{
printf("Item name:");
scanf(" %[^\n]",item[i].name);
printf("Item code:");
scanf(" %d",&item[i].code);
printf("Quantity:");
scanf(" %d",&item[i].qty);
printf("price:");
scanf(" %d",&item[i].price);
printf("Manufacturing date(dd-mm-yyyy):");
scanf(" %d-%d-%d",&item[i].mfg.day,&item[i].mfg.month,&item[i].mfg.year);
fprintf(fptr, "%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);
}
}
我做的改变。
我在获取输入后存储数据。对我而言,它运作得很好。