2014-10-17 3 views
-2

Я пытаюсь работать над проектом, где мне запрещено использовать глобальные переменные. В моем проекте, у меня есть следующие функции:Как использовать значения из функций в C

int addAccount() 
{ 
    int ID_number = 0; 
    int ID; 
    int ID_array[10]; 
    double account_balance; 
    double balance_array[10]; 
    int choice = getChoice(); 
    if (choice == 1) 
    { 
     if (ID_number + 1 > 10) 
     { 
     printf("Error\n"); 
     } 
     else 
     { 
     ID_number = ID_number + 1; 
     printf("Please enter the id\n"); 
     scanf("%d", &ID); 
     ID_array[ID_number - 1] = ID; 
     printf("Please enter the starting balance\n"); 
     scanf("%lf", &account_balance); 
     balance_array[ID_number - 1] = account_balance; 
     } 

    } 
    return; 

мне нужно каким-то образом получить значения для некоторых из этих переменных и использовать их в другой функции (в частности ID, ID_NUMBER и account_balance). Функция, которая мне нужны эти значения следующим образом:

void displayAccounts() 
{ 
    int count; 
    int choice = getChoice(); 
    int ID_number = ID_number(); 

    if (choice == 2) 
    { 
     for (count = 0; count < ID_number; count++) 
     { 
     printf("Account #%d: ID is %d\n", count + 1, ID_array[count]); 
     printf("Account balance is %.2lf\n", balance_array[count]); 
     } 

    } 
} 

Я знаю, как вернуть одно значение, но я не знаю, как сделать несколько значений можно использовать вне зависимости, где они происходят. Является ли то, что я пытаюсь сделать, даже если это возможно, или это вероятно, что я неправильно использую свой проект?

+0

'вернуть id_value;' вместо того, чтобы просто 'return;' (что должно спровоцировать хотя бы предупреждение, так как функция возвращает int) – joop

+0

В C функции могут возвращать только одно значение. Для вашего вопроса вы можете хранить значения в массиве, а затем возвращать этот массив обратно вызывающей функции. – Haris

+1

использовать указатель, вы можете использовать обновленные значения в разных функциях ... –

ответ

2

Используйте struct:

struct Account 
{ 
    int count; 
    int ID_number; 
    int balance_array[10]; 

    // etc etc 
}; 

Передайте указатель на addAccount:

void addAccount(struct Account *account) 
{ 
    account->ID_number = 0; 
    // etc 
} 

А затем передать его displayAccounts

void displayAccount(struct Account *account) 
{ 

} 

Eg:

struct Account account; 
addAccount(&account); 
displayAccount(&account); 

Обратите внимание, что в C вам необходимо использовать префикс struct, если вы не typedef struct.

+0

Когда я пытаюсь выполнить это, я получаю ошибку «ошибка: неизвестное имя типа« Учетная запись »в строке« void addAccount (Account * account) " – Titanguy654

+0

Извините, моя ошибка, я остановил ключевое слово' struct' в нескольких местах. – Sean

2

Наиболее очевидным выбором является создание struct, который может иметь любое количество полей (включая массивы) и которые могут быть переданы и возвращены функцией. Таким образом, вы можете пройти вокруг необходимого состояния.

Вы можете, конечно, также немного его оптимизировать, указав в корневой переменной структурную переменную, а затем просто передайте указатели на один и тот же экземпляр.

0

Вы можете использовать структуру для отправки значений. Также указатели могут быть хорошим альтернативным возвращать несколько значений в С.

Вы можете обратиться к следующим ссылкам тоже:

http://www.stackoverflow.com/questions/2620146/how-do-i-return-multiple-values-from-a-function-in-c

http://www.c4learn.com/c-programs/return-multiple-values-from-function.html

Смежные вопросы