C编程帮助,如何使用C中的fopen和fprintf函数将给定的输出保存到文本文件中?

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

上次我编写这个代码时,它运行得很好。我想将输出保存到文本文件中,任何通过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();
    }
}

我想你忘了把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);


    }
 }