C 中的文件处理错误

File Handling Error in C

我正在学习 C.I 中的文件处理有这段代码,但它不接受字符串作为输入将其写入 file.Any 帮助将不胜感激。

  #include<stdio.h>
#include<string.h>
#include <stdlib.h>

    int main(void)
    {
        FILE * fp1;
        fp1 = fopen("abc.txt","a+");
        if(fp1==NULL)
        {printf("An error occurred");
        }
        printf("Delete file?\n");


        int a,c;
        char name [20];
        int flag=1;
        int ch=1;
        while(flag!=0)
            {

                printf("Enter id input \n");

                scanf("%d",&a);
                fprintf(fp1,"\n%d\t",a);

                printf("Enter Name");
                gets(name);
                fputs(name, fp1);
                printf("Enter No \n");

        scanf("%d",&c);
        fprintf(fp1,"\t%d\t",c);



        printf("Write more then press 0 else 1");
        scanf("%d",&ch);
        if(ch==1)
            {
                flag=0;
            }
        }
        fclose(fp1);

    }

在 运行 这段代码中,代码在 Enter Name 后不接受输入,直接跳到 Enter No.I 希望输出为表格形式。

输入 id 后使用 getchar(),因为第一次 scanf 的 \n 保留在缓冲区中。

printf("Enter id input \n");
scanf("%d",&a);
getchar();                

当您为 scanf("%d",&a); 输入数字时,您输入一个数字并按 Enter 键。 scanf 消耗数字并在标准输入流 (stdin) 中留下换行符 ('\n')。当程序执行到gets(name);时,gets看到换行符并消费掉,存入name.

首先,永远不要使用 gets as it is dangerous as it doesn't prevent buffer overflows. Use fgets 代替:

fgets(name, sizeof(name), stdin);

其次,你必须去掉换行符。您可以通过 flushing the stdin 来完成此操作。或者您可以通过更改

scanf 读取数字后简单地扫描并丢弃换行符
scanf("%d",&a);

scanf("%d%*c",&a);

%*c 扫描并丢弃一个字符。

gets() 已弃用,请勿使用。你仍然可以使用 scanf()... 至于表格……想清楚了。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    FILE* fp1;
    fp1 = fopen("abc.txt", "a+");

    if (fp1 == NULL) {
        printf("An error occurred");
    }

    int a, c;
    char name [20];
    int flag = 1;
    int ch = 1;

    while (flag != 0) {

        printf("Enter id input:\n");
        scanf("%d", &a);
        fprintf(fp1, "%d\t", a);

        printf("Enter Name:\n");
        scanf("%s", name);
        fprintf(fp1, "%s\t", name);

        printf("Enter No:\n");
        scanf("%d", &c);
        fprintf(fp1, "%d\n", c);

        printf("Again (0) or Exit(1) ?:\n");
        scanf("%d", &ch);

        if (ch == 1) {
            flag = 0;
        }
    }

    fclose(fp1);

    return 0;
}