【问题标题】:Array isn't updating from loop数组未从循环更新
【发布时间】:2021-12-05 03:18:21
【问题描述】:

编程新手,所以我敢肯定这是一团糟,但我的代码似乎没有更新我的数组中的值,或者至少它没有打印适当的值,我不确定我哪里错了 我不确定是我的循环需要更新,还是我的主要功能或我的功能,我的老师提供的讲座对我没有太大帮助,所以我希望这里有人可以提供一些见解

#include <stdio.h>
#include <math.h>
#include <stddef.h>
#define SENTINEL -1
void updateLevel (int playerPoints, int b[]);

int main(void)
{
    int updateLevel;
    int displayLevels;
    int levelArray[6];
    for (size_t i = 0; i < 6; ++i)
    {
        levelArray[i] = 0;
    }
    int playerPoints;
    printf ("Player points (-1 to quit): ", SENTINEL);
    scanf ("%d", &playerPoints);
    
    while (playerPoints != SENTINEL)
    {
        fflush(stdin);
        printf ("Player points (-1 to quit): ", SENTINEL);
        scanf ("%d", &playerPoints);
        void updateLevel(playerPoints, levelArray);
        
    }
    printf ("\n");
    printf ("T O T A L S\n");
    printf ("\n");
    printf ("Level 1\t");
    printf ("%d\n", &levelArray[1]);
    printf ("Level 2\t");
    printf ("%d\n", &levelArray[2]);
    printf ("Level 3\t");
    printf ("%d\n", &levelArray[3]);
    printf ("Level 4\t");
    printf ("%d\n", &levelArray[4]);
    printf ("Level 5\t");
    printf ("%d\n", &levelArray[5]);
    printf ("Level 6\t");
    printf ("%d\n", &levelArray[6]);
}

void updateLevel(int playerPoints, int b[])
{
    int updateLevel;
    if ((playerPoints > -1) && (playerPoints < 10))
    {
        b[1]++;
    }   
    if ((playerPoints > 9) && (playerPoints < 20))
    {
        b[2]++;
    }
    if ((playerPoints > 19) && (playerPoints < 30))
    {
        b[3]++;
    }
    if ((playerPoints > 29) && (playerPoints < 40))
    {
        b[4]++;
    }
    if ((playerPoints > 39) && (playerPoints < 50))
    {
        b[5]++;
    }
    if (playerPoints > 49)
    {
        b[6]++;
    }
}

【问题讨论】:

  • 拥有一个名为updateLevel 的函数和一个同名的局部变量是个坏主意。
  • 听说过else吗?或forSENTINEL 的混乱在 1989 年在 8 位嵌入式系统上是有意义的,但是这些天......叹息。
  • 您有几个问题。请在打开警告的情况下编译。如果使用 GCC,请传递 -Wall 标志。这将被证明是最有启发性的。
  • fflush(stdin); 没有意义

标签: arrays c loops


【解决方案1】:

void updateLevel(int playerPoints, int* b[]);

然后放 void updateLevel(int playerPoints, int* b[]) {

* 操作符使某些东西成为一个指针,因此它没有为 b 分配更多的 ram,而是将其设置为指向 ram 中的 levelArray。

【讨论】:

  • 感谢您的帮助并理解我对此很陌生!只是为了澄清起见,您是说更新函数 updateLevel 以包含 b 的返回,那么我会将这个数组设置为 6 吗?那我怎么调用这个函数呢?在我的循环结束时?再次抱歉,我缺乏知识,我不确定这位老师是否为我解释得很好
  • 现在似乎我遇到了 2 个错误,一个在 main 中,一个在 updateLevel 函数中。主要错误还是说updateLevel不是函数或函数指针,函数错误指的是函数“return (b[6]);”中的返回并说它从没有强制转换的整数中生成指针
  • 是的,我也在那里更新了它。更改函数末尾的 return 清除了函数错误,但 main 由于某种原因仍然没有调用它
  • 第 28 行:levelArray = updateLevel(playerPoints, b);这是唯一的错误
  • 同样的错误,我应该改变函数的作用吗?
猜你喜欢
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多