我必须打印出文件的二进制值以及列中的偏移量和字符。但是,对于角色,我在打印所有值时遇到问题。我相信问题在于程序检查 i 计数器是否是 10 的倍数的方式,并且仅在发生这种情况时打印字符,因此当 i 小于 10 并且剩下的字符少于 10 个时,它不会打印它们。但我不确定。我需要一些帮助来纠正这个问题。我需要在字符部分每十个字符打印一个新行,并且它不能干扰正在打印的其余信息。 Current output
int main()
{
char file_info[250]="I like pineapples!";
FILE *fptr;
if ((fptr = fopen("try.bin","wb")) == NULL){
printf("Error! opening file");
exit(1);
}
fwrite(&file_info, sizeof(char), 250, fptr);
fclose(fptr);
fptr=fopen("try.bin","rb");
char file_array[250];
fread(file_array,sizeof(char),250,fptr); // read one character
int i=0,num=0,j=0,count=0;
printf("Offset Bytes Characters\n");
printf("------ ----------------------------- ----------");
for(i=0;i<strlen(file_array);i++){
if(i%10==0)
{
if(i>=9){
count=j;
printf(" ");
for(;j<count+10;j++)
{
printf("%c",file_info[j]);
}
}
printf("\n %5d ",num*10);
num++;
}
printf(" %x",file_array[i]);
}
fclose(fptr);
return 0;
}
我希望字符列的输出显示整个句子“我喜欢菠萝!”但实际输出是“I like pin”,即前 10 个字符,其余未达到 10 个的字符将被忽略。
最佳答案
这不是最佳方式。但这会起作用:
char file_info[250] = "I like pineapples!";
char file_array[250] = "I like pineapples!";
int i = 0, num = 0, j = 0, count = 0;
printf("Offset Bytes Characters\n");
printf("------ ----------------------------- ----------");
while (i < strlen(file_array)) {
printf("\n %5d ", num*10);
num++;
int maxOffset = count + 10;
for (int x = count; x < maxOffset; x++) {
printf(" %02x", file_array[x]);
if (x + 1 == maxOffset) printf(" ");
}
for (int x = count; x < maxOffset; x++) {
printf("%c", file_info[x]);
}
count = i = i + 10;
}
关于c - 如何在下一行之前打印n个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55788547/