Вы слишком усложняете то, как вы распределяете переменные.Это должно делать то, что вы хотите:
int numberOfDonuts;
char charInput;
int numberOfMilkshakes;
scanf("%c %d %d", &charInput, &numberOfDonuts, &numberOfMilkshakes);
С базовыми типами, такими как int
и char
, вам не нужно явно выделять память для них.Компилятор обрабатывает это для вас.
Даже распределяя их так, как вы это сделали, вы получите указатель на значение, а не само значение.Учитывая, что scanf
хочет набор указателей, нет необходимости разыменовывать указатель, а затем снова получать его адрес, что вы и пытаетесь сделать.Также будет работать следующее:
int *numberOfDonuts;
numberOfDonuts = malloc(sizeof(int));
char *charInput;
charInput = malloc(sizeof(char));
int *numberOfMilkshakes;
numberOfMilkshakes = malloc(sizeof(int));
scanf("%c %d %d", charInput, numberOfDonuts, numberOfMilkshakes);