当文件指针arg是stdout时,可以使用file吗?
当我试图覆盖最后一个",“以逗号分隔的列表中带有”)时,我尝试过这样做。“
例如:
fprintf(stdout, "1,2,3,4,");
fseek(stdout, -1, SEEK_CUR);
fprintf(stdout, ")");为实现:
1,2,3,4)
而不是
1,2,3,4,
不幸的是,我输出了后者
发布于 2014-08-15 15:57:40
只有当fseek引用可查找流时,才能在stdout上成功地使用stdout。
如果您的程序的标准输出到终端或类似的地方(这通常是默认的)或管道,那么fseek就会失败。如果因为执行了输出重定向的程序而将其转到文件中,那么fseek可以像对任何其他文件一样工作。
任何时候调用fseek时,都应该检查它的返回值,看看它是成功的还是失败的。
假设stdout是可查找的可能是错误的做法,因为这通常是一个错误的假设。
您的目标是在项之间使用", "打印一系列项,而不是在第一项之前或最后一项之后。fseek和打印一个'\b'都不是一个很好的方法来实现您想要做的事情。与其打印最后的逗号,然后尝试删除它,你应该打印逗号,只有当你没有打印在列表中的最后一项。检测到这是非常重要的。
但是,一种更简单的方法是在每个项目前面加上逗号,除非它是第一个。您不能总是判断是否要打印序列的最后一个值。你总是能分辨出你是否在打印第一张。
伪码:
bool is_first_item = true
for each item
if is_first_item
is_first_item = false
else
print ", "
end if
print item
end for https://stackoverflow.com/questions/25329670
复制相似问题