input文本并保存到文件

下面的函数创build一个新的文本文件,并允许用户input文本保存到文件。 我遇到麻烦的主要问题是1)允许单词之间的空格2)点击进入保存文本,而不是去一个新的行。

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"); } 

使用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);