如何读取换行符(' \ n')分隔字符串直到C中的EOF?

时间:2014-03-07 10:10:02

标签: c string

例如,我正在编写一个C函数,用新字符串s1替换字符串source中的子字符串s2。但是我从stdin读取输入时遇到了麻烦。我也希望它结束​​,直到满足EOF

我搜索了很多关于“读取直到EOF”和“读取包含空格的字符串”,但我没有让它工作。

#include <stdio.h>
{
  char source[120], s1[20], s2[20];
  ...
  //what ever to input multiple cases of source, s1, and s2 until EOF is met
  replace(source, s1, s2);
  printf("%s\n",source); 

  return 0;
}

4 个答案:

答案 0 :(得分:1)

您可能喜欢这样做:

char buffer[1234];

while (NULL != fgets(buffer, 1234, stdin))
{
  /* Do something with the 0-terniated content of buffer. */
}

if (ferror(stdin))
{
   /* An error occurred reading from stdin. */
}

供参考:


如果你不能在新行之前定义字符数的上限,getline()函数可能会引起关注,因为它能够根据需要分配尽可能多的内存来保存所有字符,直到下一个新线。

答案 1 :(得分:0)

您可以使用feof功能。

while(!feof(stdin)) {
     //read data with scanf, gets, fgets, etc...
}

发送EOF按CTRL+D。 有关feof功能的更多信息,请查看手册。 (终端上的man feof

答案 2 :(得分:0)

检查并给我你的意见:

#include <stdio.h>
int Replace_Function(String[] s1,String[]  s2){
String source[120], s1[20], s2[20];

//This is what u want???? 
while (getchar() != EOF)
 {
   S1=S2;
 }

  return 0;
 }

答案 3 :(得分:0)

我认为这段代码可以帮到你:

int c;
while ((c = getchar()) != EOF) {
   // do smt
}

我们必须声明c足够大以容纳getchar返回的任何值。因此我们不使用char c必须足够大才能保存EOF(在<stdio.h>中定义的整数)