C编程帮助,如何使用C中的fopen和fprintf函数将给定的输出保存到文本文件中?
上次我编写这个代码时,它运行得很好。我想将输出保存到文本文件中,任何通过fprintf打印的内容。现在,当我再次尝试运行代码时,它不会将输出保存在给定的文本文件draftday.txt中。任何帮助都将不胜感激C编程帮助,如何使用C中的fopen和fprintf函数将给定的输出保存到文本文件中?,c,printf,fopen,C,Printf,Fopen,上次我编写这个代码时,它运行得很好。我想将输出保存到文本文件中,任何通过fprintf打印的内容。现在,当我再次尝试运行代码时,它不会将输出保存在给定的文本文件draftday.txt中。任何帮助都将不胜感激 #include <stdio.h> #include <conio.h> #include <cstdlib> int main() { struct date { int day; int mont
#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();
}
}
我想你忘了把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);
尝试:
到
这里需要注意两件事: 您正在读取n个项目,但只写入n+1个项目,这是完全无效的 您从未检查scanf的返回值以确保成功 要更正: 使用与获取输入相同的for循环条件。 最后别忘了把文件弄丢。 将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);
}
}
数据不存储在结构本身中。 在文件中存储数据时,必须给出循环来存储数组中每个位置的所有数据。 只有这样,数据才会从该位置获取并存储在文件中 试试这个:
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);
}
如果您想澄清,请打印结构中的数据。我对您的代码做了一些更改。试试这个。确保您的文件位于当前目录中。或者给它一个完整的路径名
#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);
}
}
我所做的改变
我在获得输入后存储数据。对我来说,它工作得很好。一起工作怎么样?谁告诉你的?Cal fclosefptr在你的程序结束时。idk,我是一个新手,所以请期待我犯下这些错误。@barakmanos我犯了,但仍然没有luckAlso,使用所有警告和调试信息编译,例如gcc-Wall-Wextra-g。然后使用调试器,例如gdbi已经编辑了代码,请检查它,尽管仍然没有luck@MohammadQasim请避免使用fflushstdin;。“这基本上是不明确的行为。@MohammadQasim好吧,这对我很有用!!我在linux上。您可以检查代码@MohammadQasim的实时版本和稍加修改的版本,它应该是:顺便说一句,这是你第二次发布几乎相同的代码,不是吗?是的:/你可以说这些是新手必须经历的麻烦。我这么做了,但仍然没有运气。刚刚执行了你的程序,它工作得很好。数据存储在文件中。@sharon我就是这么说的,几天前它和我一起工作的很好,现在它不工作了。@Karthikeyan.R.S主代码正在工作,但文本没有存储在文本中file@MohammadQasim这怎么可能呢?
#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);
}
}
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);
#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);
}
}