Как я могу сравнить три строки, используя только один указатель и ничего больше - PullRequest
0 голосов
/ 19 мая 2019

Я хочу иметь программу на C, которая читает 3 числа и печатает большее, используя только один указатель и не больше переменных. Может ли кто-нибудь предоставить мне код? Я не смог этого сделать. Я подумал только о том, чтобы использовать указатель, подобный этому: * p [3], но я точно знаю, что это то, что нас просят сделать. Я также думал об использовании malloc, но я не уверен, как

Прототип, который нам дали, был:

#include<stdio.h>

#include<stdlib.h>

int main(void)

{

 int*p;
 ...

 }

1 Ответ

0 голосов
/ 19 мая 2019

Я хочу иметь программу на C, которая читает 3 числа и печатает большее, используя только один указатель и не больше переменных.

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    int *p;
    p = malloc(sizeof *p); // assume it worked
    if (scanf("%d", p) != 1) /* error */; // read 1st number
    printf("%d\n", *p); // print 1st number
    if (scanf("%d", p) != 1) /* error */; // read 2nd number
    printf("%d\n", *p); // print 2nd number
    if (scanf("%d", p) != 1) /* error */; // read 3rd number
    printf("%d\n", *p); // print 3rd number
    free(p);
}

Программа выше, делает то, что требуется. Кроме того, он печатает средние и меньшие цифры!


Обновление с использованием массива из 3 указателей

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    int *p[3];
    p[0] = malloc(sizeof *p[0]); // assume it worked
    p[1] = malloc(sizeof *p[0]); // assume it worked
    p[2] = malloc(sizeof *p[0]); // assume it worked
    if (scanf("%d", p[0]) != 1) /* error */; // read 1st number
    if (scanf("%d", p[1]) != 1) /* error */; // read 2nd number
    if (scanf("%d", p[2]) != 1) /* error */; // read 3rd number
    if ((*p[0] >= *p[1]) && (*p[0] >= *p[2])) printf("%d\n", *p[0]);
    if ((*p[1] > *p[0]) && (*p[1] >= *p[2])) printf("%d\n", *p[1]);
    if ((*p[2] > *p[0]) && (*p[2] > *p[1])) printf("%d\n", *p[2]);
    free(p[2]);
    free(p[1]);
    free(p[0]);
}
...