以下函数创建一个新文本文件,并允许用户输入要保存到文件中的文本。我遇到麻烦的主要问题是:1)允许单词之间的空格2)按Enter键保存文本,而不是转到新行。
void new_file(void)
{
char c[10000];
char file[10000];
int words;
printf("Enter the name of the file\n");
scanf("%123s",file);
strcat(file,".txt");
FILE * pf;
pf = fopen(file, "w" );
if (!pf)
fprintf( stderr, "I couldn't open the file.\n" );
else
{
printf("Enter text to be saved\n");
scanf("%s", c);
fprintf(pf, "%s", c);
}
fclose(pf); // close file
printf("\n\nReturning to main menu...\n\n");
}
答案 0 :(得分:1)
使用fgets()
代替scanf()
来获取用户的输入文字。
为此,请替换此行
scanf("%s", c);
使用以下代码:
if (NULL != fgets(c, sizeof(c), stdin))
{
fprintf(pf, "%s", c);
}
else
{
if (0 != ferror(stdin))
{
fprintf(stderr, "An error occured while reading from stdin\n");
}
else
{
fprintf(stderr, "EOF was reached while trying to read from stdin\n");
}
}
要允许用户读入多行,请在上面的代码周围放置一个循环。这样做你需要定义一个告诉程序停止循环的条件:
以下示例在输入单个点“。”时停止读取行。并按返回:
do
{
if (NULL != fgets(c, sizeof(c), stdin))
{
if (0 == strcmp(c, ".\n")) /* Might be necessary to use ".\r\n" if on windows. */
{
break;
}
fprintf(pf, "%s", c);
}
else
{
if (0 != ferror(stdin))
{
fprintf(stderr, "An error occured while reading from stdin\n");
}
else
{
fprintf(stderr, "EOF was reached while trying to read from stdin\n");
}
break;
}
} while (1);