Передать значение из одной функции в другую для расчета с ним

Как я могу передать значение из одной функции в другую?

Я хотел бы передать значение одной функции другой функции. В моем коде я хотел бы указать значение года для другой функции.

Вот мой код:

#include <stdio.h>
void inputDate(){
    int day, month, year;
    printf("\nPlease enter the date:)");
    scanf("%d.%d.%d", &day, &month, &year);
    
    return year;
}
void ageCalculation(){
    int age;
    age = 2020 - year;
}

int main(){
    inputDate();
    ageCalculation();
}

В чем теперь проблема? Я добавляю функцию для вывода расчета.

#include <stdio.h>

int inputDate(){
    int day, month, year;
    printf("\nPlease enter the date:)");
    scanf("%d.%d.%d", &day, &month, &year);
    
    return year;
}
void ageCalculation(int year){
    int age;
    age = 2020 - year;
return age;
   
}

void outputAge(int age){
     printf("The boy is  %d years old", age);
}


int main(){
    int year = inputDate();
    ageCalculation(year);
    outputAge(int age);
}

Мне нравится, как ваша программа устаревает через неделю после того, как вы разместили вопрос (по мере того, как мы вступаем в 2021 год)... :) ... также, ageCalculation следует, вероятно, return age; и убедиться, что день рождения текущего года не находится в будущее (ребенку, родившемуся 31 декабря 2010 г., может не исполниться 10 лет 24 декабря 2020 г.).

Myst 24.12.2020 16:19

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

Myst 24.12.2020 17:05
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
70
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вот рабочий пример:

#include <stdio.h>

int inputDate(){
    int day, month, year;
    printf("\nPlease enter the date:)");
    scanf("%d.%d.%d", &day, &month, &year);
    
    return year;
}
void ageCalculation(int year){
    int age;
    age = 2020 - year;
}

int main(){
    int year = inputDate();
    ageCalculation(year);
}

Пожалуйста, смотрите здесь работающий код.

Проблема во втором снимке заключается в том, что вы не присваиваете значение переменной. Другая проблема заключается в том, что ageCalculation определено как void, тогда как оно должно быть целым числом. Должен быть:

#include <stdio.h>

int inputDate(){
    int day, month, year;
    printf("\nPlease enter the date:)");
    scanf("%d.%d.%d", &day, &month, &year);
    
    return year;
}

int ageCalculation(int year){
    int age;
    age = 2020 - year;
    return age;
}

void outputAge(int age){
     printf("The boy is  %d years old", age);
}


int main(){
    int year = inputDate();
    int age = ageCalculation(year);
    outputAge(age);
}

Я очень сомневаюсь, что этот пример решит всю проблему, так как ageCalculation не возвращает значение age (которое также неверно вычислено, и программа не переживет новый год)... Примечание: поскольку функция ageCalculation не имеет побочные эффекты, компилятор, скорее всего, устранит его, превратив в NOOP...

Myst 24.12.2020 16:09

@Myst, ну, я должен согласиться со всем, что вы сказали :) Но я предполагаю, что это всего лишь вопрос новичка, который на самом деле будет иметь более сложную программу, которая не превратится в NOOP.

Tomer Shetah 24.12.2020 16:13

Верно ... :) ... Я также написал это для чтения ОП, просто чтобы убедиться, что они знают о дополнительных проблемах, о которых они не спрашивали напрямую ...

Myst 24.12.2020 16:16

Я только что заметил Томер обновил свой ответ. Его ответ великолепен, и я проголосовал за него.

Однако, поскольку я только что закончил добавлять комментарии к коду, вот мои наблюдения...

Обратите внимание, что ageCalculation должен (будет) возвращать int.

Некоторые комментарии отмечают хрупкость кода, но не решают эту хрупкость (это на ваше усмотрение).

#include <stdio.h>

/* I didn't touch this, but this might not be the ideal way to do this. */
int inputDate() {
  int day, month, year;
  printf("\nPlease enter the date:)");
  /* what if they enter "3/6/2000"...? which one's the month? */
  scanf("%d.%d.%d", &day, &month, &year);
  /* should you add validation? what if they entered "-1.0.2222"...? */
  return year;
}

/* note that this function returns an `int` */
int ageCalculation(int year) {
  int age;
  /*
   * The following calculation is wrong, but I didn't fix it. Consider using
   * `gmtime`: https://en.cppreference.com/w/c/chrono/gmtime Then test for month
   * and day offsets as well.
   */
  age = 2020 - year;
  return age;
}

/* didn't touch this, but could be a "girl", consider "person" instead. */
void outputAge(int age) { printf("The boy is %d years old", age); }

int main(void) {
  if (1) {
    /* variation 1 (better): use a temporary variable, it's more readable. */
    int tmp = inputDate();
    tmp = ageCalculation(tmp);
    outputAge(tmp);
  } else {
    /* alternative 2: pass the result of each calculation directly. */
    outputAge(ageCalculation(inputDate()));
  }
}

Другие вопросы по теме