无法在C中获取正常执行的功能

时间:2013-12-02 21:58:14

标签: c function

我正在尝试创建一个简单的函数。我需要这个函数将6添加到用户决定输入程序的任何数字。我一直在使用这段代码一个小时,即使看了我正在考虑的课程中的多个例子,也无法弄清楚我做错了什么。我非常感谢你的帮助。

这是我的代码:

#include <stdio.h>

void closing(void);
void addSix(void);
int x;
int result;

int main()
{
    int x;
    printf("Please enter a number to add to 6: ");
    scanf("%d", &x);
    getchar();

    addSix();


    closing();
    closing();



    return 0;
}

void closing(void)
{
    printf("That's all folks.\n");
}

void addSix(void)
{
    int result = x+6;
    printf("Result: %d\n", result);
}

4 个答案:

答案 0 :(得分:2)

你在main()之外有一个全局x变量,在main()里面有一个本地x。 main()内部的代码写入本地x,而addSix()中的代码从全局x读取。

删除main()中的int x声明,以便两个地点都可以访问全局x

答案 1 :(得分:2)

您将x声明为全局变量和main的本地变量。当您通过指针传递x到scanf时,它引用局部变量,而不是全局变量。

您可以在main中删除int x的本地声明,但这不是最佳解决方案。通常,应尽可能避免全局变量(当然,它们有时是必要的/最佳工具)。

在这种情况下,最好的解决方案是使x成为addSix()的参数。这里有几个选项:

  • 您可以让addSix返回总和,然后使用该返回值
  • 您可以将x的地址传递给addSix,并使用指针使函数修改x本身。

前者看起来像这样:

int addSix(int x) {
    return x + 6;
}

后者看起来像这样:

void addSix(int * x) {
    *x += 6;
}

答案 2 :(得分:1)

您有两个名为x的变量。一个是main的本地,另一个是全局变量。

功能addSix无法在main中看到本地。它只能看到全局变量。

您应该更改addSix,以便将值作为参数传递。

void addSix(int x)
{
    printf("Result: %d\n", x+6);
}

像这样调用函数:

addSix(x);

或许你希望你的函数返回一个值:

int addSix(int x)
{
    return x+6;
}

你可以这样打电话:

int result = addSix(x);

你的两个全局变量都是不必要的。删除它们。

答案 3 :(得分:0)

您有一个全局x和一个本地x变量,您可以在其中实际保存用户输入。 只使用全局变量就可以解决这个问题

#include <stdio.h>

int x;

void addSix(void)
{
    int result = x+6;
    printf("Result: %d\n", result);
}


int main()
{
    printf("Please enter a number to add to 6: ");
    scanf("%d", &x);
    getchar();

    addSix();

    return 0;
}