将用户输入字符串写入C中的文件

时间:2016-07-31 14:40:29

标签: c file-io io

我的程序需要获取用户的输入并将其保存到外部文件以供将来参考。这是代码的基本概要。

void newActivity(FILE *foutput) {
    char name[31];
    char description[141];
    finput = fopen("activities.txt", "a");

    printf("\n What is the name of your activity (up to 30 characters):\n");
    fgets(name, sizeof(name), stdin);

    printf("\nEnter a brief description (up to 140 characters) of what %s is about:\n",
           fputs(name, stdout));
    fgets(description, sizeof(description), stdin);

    if (finput == NULL) {
        printf("\nCould not open file.");
        exit(1);
    }

    fprintf(foutfile, "%s\n", name);
    fprintf(foutfile, "%s\n", description);

    fclose(foutfile)
}

当我运行一个只询问名称并打印该名称的简单测试程序时,一切都很好。它看起来像这样:

int main() {
    char name[50];
    fprint("What is your name? ");
    fgets(name, sizeof(name), stdin);
    fputs(name, stdout);
    return 0;
}

与工作测试程序不同,我的程序在转移到第二个printf()语句之前不会从用户那里获取任何输入。它确实读取printf语句中的字符串,但返回值(null)

至于写入文件,两条fprintf行应该这样做,但我无法确认它,因为输入文本没有被正确记录。

这是在main()之外声明的函数。这会影响情况吗?

1 个答案:

答案 0 :(得分:7)

这是不正确的:

printf("\nEnter a brief description (up to 140 characters) of what %s is about:\n", fputs(name, stdout));

fputs会返回int,而您的printf想要一个字符串%s

删除fputs,然后将name传递给printf

printf("\nEnter a brief description (up to 140 characters) of what %s is about:\n", name);

将字符串写入文件时使用%s

fprintf(foutfile, "%s", name);
fprintf(foutfile, "%s", description);

请注意,您不需要\n,因为fgets会将\n与字符串保持一致。

  

来自评论:我关注的是该程序无法[读取fgets(name, sizeof(name), stdin)的输入

当您的stdin与之前的操作相比有额外的\n时,通常会发生这种情况。例如,如果您之前的输入操作使用int读取scanf,您会看到此效果:

scanf("%d", &num);
fgets(name, sizeof(name), stdin);

如果用户按 5 输入 X 输入,程序会将num设置为5,但name将设置为包含一个'\n'的字符串,而不是'X'。这是因为scanf无法从缓冲区中删除 Enter 生成的'\n',因此scanf找到它,并认为用户刚刚输入了一个空字符串。