#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. я не совсем понимаю, что вы имеете в виду. можете ли вы предложить решение проблемы?