Как напечатать n количество символов перед следующей строкой?

#c

#c

Вопрос:

Я должен распечатать двоичные значения файла вместе со смещением и символами в столбцах друг с другом. Однако для символов у меня возникают проблемы с распечаткой всех значений. Я считаю, что проблема заключается в том, как программа проверяет, является ли счетчик 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(amp;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             Charactersn");
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 ] ",num*10);
            num  ;

        }


 printf(" %x",file_array[i]);
 }
 fclose(fptr);

 return 0;
}
  

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

Ответ №1:

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

 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             Charactersn");
printf("------  -----------------------------  ----------");

while (i < strlen(file_array)) {
  printf("n ] ", num*10);
  num  ;
  int maxOffset = count   10;
  for (int x = count; x < maxOffset; x  ) {
    printf(" x", file_array[x]);
    if (x   1 == maxOffset) printf("  ");
  }
  for (int x = count; x < maxOffset; x  ) {
    printf("%c", file_info[x]);
  }
  count = i = i   10;
}
  

Ответ №2:

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

Комментарии:

1. на самом деле printf(«%c»,file_info[j]) выполняется, когда i>10 (например,20 ), при условии, что i кратно 10, поскольку i==0 проверяет наличие кратных 10

2. ДА. Я знаю, но в этом случае ваша длина строки равна 18. Ваш цикл for прервется, когда i = 17 .

3. я не совсем понимаю, что вы имеете в виду. можете ли вы предложить решение проблемы?