Как напечатать количество символов перед следующей строкой? - PullRequest
0 голосов
/ 22 апреля 2019

Я должен распечатать двоичные значения файла вместе со смещением и символами в столбцах друг с другом. Однако для персонажей у меня возникают проблемы с распечаткой всех значений. Я полагаю, что проблема заключается в том, как программа проверяет, является ли счетчик i кратным 10, и печатает символы только тогда, когда это происходит, поэтому, когда значение i меньше десяти и меньше десяти символов, оно не печатает их. Я не уверен, хотя. Я хотел бы получить помощь в устранении этой проблемы. Мне нужна новая строка, напечатанная в символьной части каждые десять символов, и она не должна мешать остальной информации, которая выводится на печать. Токовый выход

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;
}

Я ожидаю, что вывод для столбца символов покажет все предложение "Я люблю ананасы!" но фактическим выводом является «Я люблю пин», которые являются первыми 10 символами, а остальные символы, которые не составляют до 10, не учитываются.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

Это не оптимальный способ.Но этот будет работать:

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;
}
0 голосов
/ 22 апреля 2019

Ваша проблема в том, что вы всегда проверяете if (i% 10 == 0) , но длина вашей строки равна 18. Это значит printf ("% c", file_info [j]) не может работать, когда i> 10 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...