程序没有将用户的输入附加到文本文件?
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++;
}
目标是将一些默认文本示例写入新文本文件,然后从用户那里获取更多字符串输入并将它们附加到同一个文件。但问题出现在 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++;
}