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

如何读取换行符(';\n';)分隔字符串,直到C中的EOF?,c,string,C,String,例如,我正在编写一个C函数,用一个新字符串s2替换字符串source中的子字符串s1。但是我在从stdin读取输入时遇到了问题。我还希望它结束,直到满足EOF 我搜索了很多关于“读取到EOF”和“读取包含空格的字符串”的内容,但都没有成功 #include <stdio.h> { char source[120], s1[20], s2[20]; ... //what ever to input multiple cases of source, s1, and s2 u

例如,我正在编写一个C函数,用一个新字符串
s2
替换字符串
source
中的子字符串
s1
。但是我在从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;
}
#包括
{
字符源[120],s1[20],s2[20];
...
//在满足EOF之前,输入源、s1和s2的多个案例需要什么
替换(源,s1,s2);
printf(“%s\n”,源);
返回0;
}

您可以使用
feof
功能

while(!feof(stdin)) {
     //read data with scanf, gets, fgets, etc...
}
要发送EOF,请按CTRL+D。
查看手册以了解有关feof功能的更多信息。(
man-feof
on-terminal)

您可能需要执行以下操作:

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. */
}
供参考:



如果在新行之前无法定义字符数的上限,则该函数可能会很有意思,因为它能够分配足够的内存来保存所有字符直到下一新行。

请检查此项并给出您的意见:

#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;
 }
#包括
int Replace_函数(字符串[]s1,字符串[]s2){
串源[120],s1[20],s2[20];
//这就是你想要的????
while(getchar()!=EOF)
{
S1=S2;
}
返回0;
}

我认为这段代码可以帮助您:

int c;
while ((c = getchar()) != EOF) {
   // do smt
}
我们必须声明c足够大,可以容纳getchar返回的任何值。所以我们不使用char,因为

c必须足够大以容纳EOF(这是在
中定义的整数)

您可能想问如何读取文件?事实上,我正在在线判断系统上解决一个问题,所有数据都是从标准输入中输入的,以EOF结尾。所以这就是为什么我要问…只是为了澄清这一点:没有像EOF这样的字符。因此,它不能终止任何内容,也不能读取.thx,但有其他替代方法吗?令人遗憾的是,OJ限制了feof函数的使用。“fgets”函数会自动执行。当读取“\n”或“EOF”时,它停止读取。char*buffer=malloc(DIM);char*read=fgets(缓冲区、DIM、标准输入);“while(!feof(file))”的答案总是错误的“谢谢你的建议@alk…但这是我建议的第二个选择,对吗?是/否,
fgets()
可以胜任这项工作。请参阅我的详细回答。