c - while 函数未正确返回计数

标签 c loops while-loop

我正在尝试使用 while 函数来计算我的一个指针是否大于 0。

我需要计算返回值大于 0 的金额。

下面是我使用 while 部分的代码:

struct mode {
    int m_mode_max[10];
    ...
}

struct gained_var {
    struct mode var1[10];
    ...
}

struct fs_session {
    struct gained_var gained[5];
    ...
}

void frist_gained(struct fs_session *fs, int value) {

    struct itv_expanse itv[5];
    memset(itv, 0, sizeof(itv));

    for (int i = 0; i < 5; i++) {
        int count = 0;
        for (int p = 0; p < 10; p++) {
            while (fs>gained[value].var1[i].m_mode_max[p] > 0) {
                count++;
                printf("count %d\n", count);
            }
        }
    }

    itv[value].var1[i].m_mode = fs>gained[value].var1[i].m_mode_max[rand()%count];
    printf("m_mode %d rnd_value %d\n", itv[value].var1[i].m_mode, rnd()%count);
}

我可以使用 if 函数来检查计数,但我想使用 While

使用 while 函数执行此操作的最佳方法是什么?

最佳答案

您已经在循环 ip 来迭代该结构。您需要一个 if 来决定增加计数器。

问题是每次计数增加时您都会打印计数。也许您应该只在循环完成时打印它?

for (int i = 0; i < 5; i++) {
    int count = 0;
    for (int p = 0; p < 10; p++) {
        // Typo fix: fs>gained to fs->gained
        if (fs->gained[value].var1[i].m_mode_max[p] > 0) {
            count++;
        }
    }
    printf("i: %d, count: %d\n", i, count);
}

如果只想对 m_mode_max 进行一次计数,则可以添加 break 以在计数后退出 p 循环。

for (int i = 0; i < 5; i++) {
    int count = 0;
    for (int p = 0; p < 10; p++) {
        // Typo fix: fs>gained to fs->gained
        if (fs->gained[value].var1[i].m_mode_max[p] > 0) {
            count++;
            break;
        }
    }
    printf("i: %d, count: %d\n", i, count);
}

关于c - while 函数未正确返回计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59480333/

相关文章:

java - 读取文本文件,然后将大写转换为小写并写入文本文件

c - 将数据存储在两个彼此相关的数组中

Perl:对其他散列使用引用 has

javascript - 在循环内映射数组

java - 在 500 毫秒内改变 JButton 颜色

loops - 重复 K 折交叉验证的循环

c++ - 错误 : expected ')' before 'ID'

c - C中嵌套strtok函数问题

c - 如何写入来自父进程的 getpass() 输入?

c - 更新链接列表顶部条目