C语言问题打印文件的字节数

请问这个怎么做?编写一个 C 程序,print_bytes,它接受一个参数,一个文件名,它应该读取指定的文件并为文件的每个字节打印一行。该行应以十进制和十六进制显示字节。如果该字节是 ASCII 可打印字符,则还应打印其 ASCII 值。
假设 ASCII 可打印字符是那些ctype.h函数isprint返回非零值的字符。

img

img

代码如下:

#include <stdio.h>
#include <ctype.h>
int main(int argc, char *argv[])
{
    int i=0;
    unsigned char ch;
    if(argc != 2) 
    {
        printf("参数不满足要求"); //C语言参数包含程序名
        return 0;
    }
    FILE *fp = fopen(argv[1],"r"); 
    if (fp == 0)
    {
        printf("%s文件打开失败\n",argv[1]);
        return 0;
    }
    while ((ch = fgetc(fp))!= EOF)
    {
        if(isprint(ch))
            printf("byte %4d:%4u 0x%02x '%c'\n",i,ch,ch,ch);
        else
            printf("byte %4d:%4u 0x%02x\n",i,ch,ch);
        i++;
    }
    fclose(fp);
    return 0;
}