Как вернуть три числа в функции без использования массива или указателя в C? - PullRequest
1 голос
/ 15 марта 2019

Вопрос:

Напишите программу, которая принимает три целых числа, а затем печатает их в порядке чтения и в обратном порядке. Используйте три функции: одну для чтения данных, одну для их печати в порядке чтения и одну для печати в обратном порядке.

Программа (не закончена):

#include <stdio.h>

int accept(){
    int x, y, z;
    printf("Please enter three integers: \n");
    scanf("%d %d %d", &x, &y, &z);
    return x, y, z;
}

int main(){
    x, y, z = accept();
}

Ошибка: ошибка: 'x' не объявлено (первое использование в этой функции) | примечание: каждый необъявленный идентификатор сообщается только один раз для каждой функции появляется в | error: 'y' undeclared (первое использование в этой функции) | ошибка: 'z' не объявлено (первое использование в этой функции) |

Как я могу изменить эту программу, чтобы я мог возвращать три переменные без использования массивов или указателей? Или это невозможно без их использования?

Ответы [ 2 ]

3 голосов
/ 15 марта 2019

Вы можете создать структуру, которая содержит эти три значения

typedef struct MyStruct
{
    int a, b, c;
} MyStruct;

Затем передайте указатель на экземпляр структуры в и из функции (примечание: ВСЕГДА делайте это с указателем, так как он более эффективен, поскольку он передает только 8-байтовое значение. Передача самой структуры означает (если я правильно помню ) компилятор попытается разбить структуру на ее значения при передаче в качестве аргумента)

0 голосов
/ 15 марта 2019

Расширение моего комментария. Это не разумный код и на практике не рекомендуется , но это один из способов изменить ваш код, чтобы реализовать требование множественных возвращаемых значений без массивов или указателей (или структур).

#include <stdio.h>

int accept(char opt){
    /* static variables remember their values between calls */
    static int x, y, z;

    if (opt=='x') return x;
    if (opt=='y') return y;
    if (opt=='z') return z;

    /* any other value of opt, read in new values */
    printf("Please enter three integers: \n");
    return scanf("%d %d %d", &x, &y, &z);
}

int main(){
    int x, y, z;
    accept(' ');
    x = accept('x');
    y = accept('y');
    z = accept('z');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...