C系统调用I / O和sscanf练习

时间:2017-03-26 01:17:02

标签: c io system-calls scanf

我正在尝试编写一个使用系统调用(readwrite)获取输入和输出的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);

,则会有效

1 个答案:

答案 0 :(得分:1)

你有这个:

int i;
write(1, &i, sizeof(i));

我猜你相信这相当于:

printf("%d", i);

但事实并非如此!

printf()格式其参数格式化为人类可读的ASCII文本,write()不会这样做。相反,它将原始字节直接写入文件中作为二进制机器可读数据。

只需使用printf()

至于:

write(1, "Starting value: ", 16);

这是糟糕的代码。代替:

puts("Starting value: ");