例如,我正在编写一个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;
}
答案 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>
中定义的整数)