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

时间:2013-08-24 01:26:05

标签: c

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

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

编辑:如果不是很明显,我是C的完全新手

4 个答案:

答案 0 :(得分:2)

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

您可能想要使用fgetc。这是c程序文件fgetc.c

的代码示例
#include <stdio.h>

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

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

答案 1 :(得分:2)

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

#include <stdio.h>

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。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

根据应用程序的编码方式(即如何定义缓冲区),\n会提示系统刷新缓冲区并将数据提供给scanf。这应该作为默认情况发生,您无需做任何事情。

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

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