我正在尝试编写一个使用系统调用(read
和write
)获取输入和输出的C程序。但是,我还想使用sscanf
进行转换。程序将输入一个起始值和结束值,并计入该结束值。我正在尝试使用sscanf
进行转换。
int main(int argc, char **argv){
char beg[5];
char stop[5];
int i, start, end;
write(1, "Starting value: ", 16);
read(0, beg, 4);
sscanf(beg,"%d",&start);
write(1, "Ending value: ", 14);
read(0, stop, 4);
sscanf(stop,"%d",&end);
int dif = end - start;
if (dif >= 0){
for (i = start; i <= end; i++){
write(1, &i, sizeof(i));
}
write(1, "\n", 1);
}
return 0;
}
期望的输出:
Starting value: 1
Ending value: 4
1 2 3 4
但是,没有打印计数(如果我使用printf("%d ", i);
)
答案 0 :(得分:1)
你有这个:
int i;
write(1, &i, sizeof(i));
我猜你相信这相当于:
printf("%d", i);
但事实并非如此!
printf()
将格式其参数格式化为人类可读的ASCII文本,write()
不会这样做。相反,它将原始字节直接写入文件中作为二进制机器可读数据。
只需使用printf()
。
至于:
write(1, "Starting value: ", 16);
这是糟糕的代码。代替:
puts("Starting value: ");