Я очень новичок в программировании на Си.Я надеюсь, что смогу объяснить мою проблему.Я пытаюсь разработать программу для чтения файла binary
и преобразования в режим ASCII
.Для этого не было никаких проблем.Но я должен спросить пользователя, сколько строк он / она хочет прочитать (например, 20 строк), затем показать только 20 строк из двоичного файла и попросить пользователя нажать любую клавишу для продолжения.После нажатия любой клавиши снова отобразите следующие 20 строк из этого файла и так далее.
Я пытался использовать getch()
и getchar()
, но это работало только для одной строки.
Мой следующий код может помочь объяснить правильно.Пожалуйста, помогите мне от этого.Заранее спасибо.
#include<conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void header(); //Title function declaration
int main(int argc, char *argv[])
{
FILE *fp; // File pointer declaration
int i, j;
unsigned char buffer[17]; // Trying to get value for 16 bites each
fp = fopen(argv[1], "rb");
if (argc == 1) { // Condition for if user didnt specify file name
/* Assume that argv[0] is the program name */
printf("usage: %s, <file_name>", argv[0]);
return 0;
}
if (fp == NULL) { // condition if there is no file
fprintf(stderr, "File Open error (%s) , error = %d", argv[1], errno);
exit(1);
}
else
{
header(); // Calling function header
int read = 0;
int address = 0;
while ((read = fread(buffer, 1, 16, fp)) > 0)
{
printf("%08X", address);
printf(" ");
address += 16;
for (i = 0; i < read; i++)
{
if (i == 8) {
if (buffer[i] != NULL)
printf("-");
}
else {
printf(" ");
}
printf("%02X", buffer[i]);
}
int space = 16 - read;
if (space != 0) {
for (int x = 0; x < space; x++) {
int y = read + (x - buffer[x]);
printf(" ");
}
}
printf(" ");
for (j = 0; j < read; j++)
{
if (buffer[j] == NULL) {
printf(".");
}
if (isprint(buffer[j])) {
printf("%c", buffer[j]);
//fflush(stdin);
}
else {
if (buffer[j] != NULL) {
printf(".");
}
}
}
printf("\n");
}
}
fclose(fp);
return 0;
}
void header() {
printf("ADDRESS ");
for (int i = 0X00; i <= 0X0F; i++)
{
if (i == 8) {
printf("-");
}
else
{
printf(" ");
}
printf("%02X", i);
}
printf(" 0123456789ABCDEF \n");
printf("----------------------------------------------------------------------------\n");
}
И вывод должен быть как Образец