如何读取换行符(';\n';)分隔字符串,直到C中的EOF?
例如,我正在编写一个C函数,用一个新字符串如何读取换行符(';\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
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()
可以胜任这项工作。请参阅我的详细回答。