繁体   English   中英

有人可以告诉我我在此C程序中做错了什么吗?

[英]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");

这里要注意的不止一件事。

  1. void main()更改为int main() ,并在末尾添加return 0

  2. 将结构定义移到main()外部,并且可以移到可以包含的某些头文件中。 好的做法。

  3. p = fopen( "abcd.txt", "w+" ); 之后,检查fopen()是否成功。 如果成功,则使用fp

  4. fprintf(stderr,"price:"); 这会将您的所有输出数据重定向到stderr ,而不重定向到fp 如果要将输出放置在指定文件中,请用fp更改stderr

  5. 读取数据后,使用fprintf(fp, ...); 将数据输出(写入)到文件。 [这一点对第4点来说是多余的。 ]

  6. 您有多个fclose(fp); 删除所有其他[存在于循环中],并保留在结束[可能的return语句]之前的一个。

  1. 您需要写入打开的文件描述符而不是stderr。 例如:应该是fprintf(fp, "abcd"); 不是fprintf(stderr, "adcd");
  2. 您正在关闭for循环中的fp。 您应该在主体末端将其关闭。 因此,删除for循环中的语句。
  3. 即使这样,输出也不会采用您输入的值。 由于您正在读取值,但未存储在文件中。 为此,在这种情况下,您需要使用fprintf()将值存储到文件中。

因为您没有使用该相应文件的文件指针。 然后使用w +打开它,它将截断其中的内容。

然后使用fp而不是stderr写入文件。 然后,您将两次使用fclose。

fprintf(stderr,"             *****  INVENTORY *****\n"); 

在这一行中,您必须使用fp而不是stderr来存储在文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM