【问题标题】:Second user-defined function returns garbage value?第二个用户定义函数返回垃圾值?
【发布时间】:2012-09-21 21:18:43
【问题描述】:

我一直在自学 C 编程,但在跨函数使用变量方面遇到了困难。

当我编译并运行该程序时,函数 askBirthYear 返回正确的值,但 sayAgeInYears 返回 0 或垃圾值。我相信这与我使用变量birthYear 的方式有关,但我不知道如何解决这个问题。

代码如下:

#include <stdio.h>
#include <stdlib.h>

int askBirthYear(int);
void sayAgeInYears(int);
int birthYear;

int main(void)
{    askBirthYear(birthYear);
     sayAgeInYears(birthYear);
     return EXIT_SUCCESS;
}

int askBirthYear(int birthYear)
{
    printf("Hello! In what year were you born?\n");
    scanf("%d", &birthYear);
    printf("Your birth year is %d.\n", birthYear);
    return birthYear;
}

void sayAgeInYears(int birthYear)
{
    int age;
    age = 2012 - birthYear;
    printf("You are %d years old.\n", age);
}

【问题讨论】:

  • 如果你有一个有用的答案,你应该接受它。单击 upvote/downvote 计数器下的复选标记。这会将问题标记为“已回答”,并为您提供少量声誉奖励。请参阅How do I ask 常见问题解答文章。

标签: variables garbage


【解决方案1】:

简单。您通过值将birthYear 传递给askBirthYear,而不是通过引用。然后你只需将它的返回值放在地板上。您对 askBirthYear 的声明及其定义也存在分歧。

#include <stdio.h>
#include <stdlib.h>

int askBirthYear(void);
void sayAgeInYears(int);
int birthYear;

int main(void)
{
     birthYear = askBirthYear();
     sayAgeInYears(birthYear);
     return EXIT_SUCCESS;
}

int askBirthYear(void)
{
    int year;
    printf("Hello! In what year were you born?\n");
    scanf("%d", &year);
    printf("Your birth year is %d.\n", year);
    return year;
}

void sayAgeInYears(int birthYear)
{
    int age;
    age = 2012 - birthYear;
    printf("You are %d years old.\n", age);
}

【讨论】:

  • 是的,我在该函数上输入了错误的返回类型。不过,这在我的源文件中是正确的。但是,我不知道如何通过值而不是引用传递变量。我也不明白你说的“掉在地上”是什么意思。抱歉,我之前没有编程经验,所以这对我来说是全新的。
  • 代码现在无法编译...我认为 askBirthYear 也可以接收一个整数而不是 void...我在这里真的很困惑。
  • 抱歉,我漏掉了一个分号。我修好了再试一次。
  • 哇哦,我不敢相信我没有看到那个。该程序现在运行良好,非常感谢!这开始变得更有意义了。
  • 我故意这样修改你的程序,因为你提到你刚刚开始学习 C。你将不得不了解什么是通过引用传递的,什么是指针以及不正确使用指针的后果是什么。但首先你需要更熟悉一些基本的东西)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 2023-02-06
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多