程序没有将用户的输入附加到文本文件?

Program is not appending input taken from user to a text file?

目标是将一些默认文本示例写入新文本文件,然后从用户那里获取更多字符串输入并将它们附加到同一个文件。但问题出现在 write_input() 函数中,当按下 enter 时它不会结束循环,也不会附加用户输入到文本文件。也许应该使用普通的 char 数组 ,因为输入和测试可能更容易?目前仍在练习双指针和内存使用。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max_rows 50
#define string_lenght 255

void input_starting_text(FILE *, char **);
void write_input(FILE *);
void free_mem(char **);

int main(void) {
    char *starting_text[] = { "First example of text.",
                                   "Second example of text.",
                                   "Third example of text." };
    const char *location = "textFile.txt";
    FILE *file;
    if ( (file = fopen(location, "w")) == NULL ) return 1;
    input_starting_text(file, starting_text);
    fclose(file);
    if ( (file = fopen(location, "a")) == NULL ) return 1;
    write_input(file);
    fclose(file);
    return 0;
}

void input_starting_text(FILE *file, char **text) {
    for (int i = 0; i < 3; i++)
    {
        if (i == 2)
        {
            fprintf(file, "%s", text[i]);
        }
        else fprintf(file, "%s\n", text[i]);
    }
}

void write_input(FILE *file) {
    char **input = malloc(max_rows * sizeof(char *));
    for (int i = 0; i < max_rows; i++)
    {
        input[i] = malloc(max_rows * sizeof(char));
    }
    int n = 0;
    do
    {
        printf("Enter text for writing to file: ");
        fgets(input[n], string_lenght, stdin);
        fprintf(file, "%s\n", input[n]);
        fflush(stdin);
        n++;
    } while (input[n] != "\n");
    free_mem(input);
}

void free_mem(char **text) {
    for (int i = 0; i < max_rows; i++)
    {
        free(text[i]);
    }
    free(text);
}

您正在刷新 stdin 而不是指向文件的指针。 尝试替换您的功能:

void write_input(FILE *file) {
    char **input = malloc(max_rows * sizeof(char *));
    for (int i = 0; i < max_rows; i++)
    {
        input[i] = malloc(max_rows * sizeof(char));
    }
    int n = 0;
    do
    {
        printf("Enter text for writing to file: ");
        fgets(input[n], string_lenght, stdin);
        fprintf(file, "%s\n", input[n]);
        fflush(file);
        n++;
    } while (input[n] != "\n");
    free_mem(input);

您可以看到现在包含 fflush(file); 而不是 stdin

已解决: 稍微更改程序,删除 do while 循环并测试 字符串中的第一个字符换行 ,现在一切都按预期工作。

    while(1)
    {
        printf("Enter text for writing to file: ");
        fgets(input[n], string_lenght, stdin);
        if (input[n][0] == '\n')
        {
            break;
        }
        fprintf(file, "%s", input[n]);
        fflush(file);
        n++;
    }