输入文本并保存到文件

时间:2013-11-22 15:57:31

标签: c linux

以下函数创建一个新文本文件,并允许用户输入要保存到文件中的文本。我遇到麻烦的主要问题是: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"); 
}

1 个答案:

答案 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);