读取可能包含换行符的标准输入的最佳方法?

我必须在C中编写一个程序来处理换行符作为字符串的一部分。 我需要一种处理换行符的方法,如果遇到它,它不一定终止输入。 到目前为止,我一直在使用fgets()但是一旦到达’\ n’字符就会停止。 是否有一个很好的function来处理来自控制台的输入,但不一定以换行符结尾?

澄清一下:我需要一个不会在换行符char处终止的方法,因为在遇到换行符时的这个特定练习中,它被替换为空格char。

编辑:如果不是很明显,我在C中是一个完整的新手

fgets从流中获取一行。 一行定义为以换行符,文件结尾或错误结尾,因此您不希望这样。

您可能想要使用fgetc 。 这是ac程序文件fgetc.c的代码示例

 #include  int main (void) { int c; while ((c = fgetc(stdin)) != EOF) fputc(c, stdout); } 

编译如下:

 cc fgetc.c -o fgetc 

像这样使用(注意换行符’\ n’):

 echo 'Hello, thar!\nOh, hai!' | ./fgetc 

或者像这样:

 cat fgetc.c | ./fgetc 

阅读fgetcfunction手册以了解更多信息: man fgetc

如果我正确理解你的问题,你想从标准输入中读取,直到用户完成输入(当然不是新行)。 这可以通过在获取输入时设置类似EOF的标志来完成。 我提出的一种方法是:

 #include  int main(void) { char ch; char str[100]; int i = 0; setbuf (stdout,NULL); while ( (ch = getchar()) != EOF)// user can input until the EOF which he or she enters to mark the end of his/her typing or more appropriately input. { str[i] = ch;// you can store all the input character by character in a char array i++; } printf ("%s",str);// then you can print it at last as a whole return 0; } 

BEGINNER的注意事项 EOF因系统而异,因此请检查并为您的系统输入正确的EOF。

如果您只是在不需要scanf()的情况下读取信息块,那么fread()可能就是您所追求的。 但是在控制台上你可以读到\ n,注意\ n,然后继续阅读更多,如果你认为\ n不适合你。

scanf按指示使用时有效。 具体来说,它将\ n视为空白区域。

根据应用程序的编码方式(即缓冲区的定义方式), \n会提示系统刷新缓冲区并将数据输入scanf 。 这应该作为默认值发生,您无需执行任何操作。

所以真正的问题是,你需要从控制台获得什么样的数据或字符? 在某些情况下, scanf将删除空格,并且不会将空格,制表符,新行传递到您的程序中。 但是, scanf可以编码为不执行此操作!

定义如何输入数据,我可以指导您如何编码scanf。