Как я могу передать значение из одной функции в другую?
Я хотел бы передать значение одной функции другой функции. В моем коде я хотел бы указать значение года для другой функции.
Вот мой код:
#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);
}
Помимо принятия ответа Томера (что означает, что ответ решил проблему), я бы порекомендовал вам также проголосовать за его ответ, что я и сделал (как потому, что он был хорошо написан, так и потому, что он нашел время, чтобы обновить его и ответить на ваш второй вопрос )... вас также могут заинтересовать комментарии, которые я написал в своем ответе.
Вот рабочий пример:
#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, ну, я должен согласиться со всем, что вы сказали :) Но я предполагаю, что это всего лишь вопрос новичка, который на самом деле будет иметь более сложную программу, которая не превратится в NOOP
.
Верно ... :) ... Я также написал это для чтения ОП, просто чтобы убедиться, что они знают о дополнительных проблемах, о которых они не спрашивали напрямую ...
Я только что заметил Томер обновил свой ответ. Его ответ великолепен, и я проголосовал за него.
Однако, поскольку я только что закончил добавлять комментарии к коду, вот мои наблюдения...
Обратите внимание, что 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()));
}
}
Мне нравится, как ваша программа устаревает через неделю после того, как вы разместили вопрос (по мере того, как мы вступаем в 2021 год)... :) ... также,
ageCalculation
следует, вероятно,return age;
и убедиться, что день рождения текущего года не находится в будущее (ребенку, родившемуся 31 декабря 2010 г., может не исполниться 10 лет 24 декабря 2020 г.).