Проблемы с функцией read_new_int - PullRequest
0 голосов
/ 22 ноября 2018

В моей программе должно быть меню из 5 вариантов.Во-первых, он должен присвоить новое значение переменной «n», но когда я пишу на входе параметр 0, а затем я вставляю 1 в качестве следующего параметра, который записывает двоичное представление целого числа «n» из MSB,Я обнаружил, что «n» имеет то же значение, которое я написал во входных данных в начале моей программы.Я действительно не могу найти, что происходит.

#include <stdio.h> 
#define DIM_F 4
#define DIM 31

// This is a function which reads an integer from input //
void read_new_int(int n); 
// This is a function that prints the binary representation of integer n
void print_bin_msb(int n);
// This is a function that calculates the opposite of a binary number and converts it into decimal
void calc_opp_dec(int n); 
// This function prints the opposite binary of an integer read in input
void print_opp_bin_msb(int n); 

int main(void) {
  void (*f[DIM_F])(
      int) = {read_new_int , print_bin_msb, calc_opp_dec , print_opp_bin_msb};
  int n;
  int choice_option;
  printf("Insert a positive integer");
  while (scanf("%d", &n) != 1) {
    printf("Insert a positive integer\n ");
    while (getchar() != '\n')
      ;
  }

  do {
    printf("0: Read new integer n\n1: print the binary representation of integer n\n2: Calcolate the opposite of the last integer and printing it as a decimal\n3: Calcolate the opposite of an integer\n4: Print the binary representation of the opposite of the last integer\n5: End of the program\n");
    printf("Which option would you choose?");
    while (scanf("%d", &choice_option) != 1 && choice_option < 4
        && choice_option >= 0) {
      printf("Insert a new integer: ");
      while (getchar() != '\n')
        ;
    }
    if (choice_option < 4 && choice_option >= 0) {
      (*f[choice_option])(n);
    } else {
      printf("CIAO - programma terminato\n");
    }
  } while (choice_option < 4 && choice_option >= 0);
  return 0;
}

void calc_bin(int choice, int n) {
  int i;
  int arr[DIM];
  for (i = 0; i < DIM; i++) {
    if (n % 2 == 0)
      arr[i] = 0;
    else {
      arr[i] = 1;
    }
    n = n / 2;
  }

}

void read_new_int(int x) {
  while (scanf("%d", &n) != 1) {
    printf("Insert a positive integer\n ");
    while (getchar() != '\n')
      ;
  }
}

void print_bin_msb(int n) {
  int i;
  int temp = 0;
  int temp_1 = n;
  int tempa = n;
  while (!(temp_1 == 0)) {
    temp = temp + 1;
    temp_1 = temp_1 / 2;
  }
  if (n >= 0) {
    printf("0");
  } else {
    printf("1");
  }
  for (i = 0; i < DIM - temp; i++) {
    printf("0");

  }
  do {
    if (tempa % 2 == 0) {
      printf("0");
    } else {
      printf("1");
    }
    tempa = tempa / 2;
  } while (tempa != 0);

  printf("\n");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...