You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用无输入无显式输出的void print_winner(void)函数?

关于void print_winner(void)的运作逻辑

这种无参数、无返回值的函数,核心是靠全局变量或者静态变量来传递计票数据,然后在函数内部自己完成计算和输出。具体拆解下:

  • 获取数据的方式:你的计票函数统计完票数后,肯定会把结果存在某个地方——大概率是全局变量(比如存票数的数组、带票数的候选人结构体数组),或者是和print_winner同文件的静态变量。print_winner不需要参数,直接读取这些共享变量就能拿到计票结果。
  • 输出的方式:函数内部会自己调用打印语句(比如C里的printf)把获胜者信息输出到控制台,所以不需要返回值,结果直接就输出了。

给你举个简单的代码例子,一看就懂:

#include <stdio.h>

// 全局的候选人结构体数组,存储名字和票数
typedef struct {
    char name[50];
    int votes;
} Candidate;

Candidate candidates[] = {{"Alice", 0}, {"Bob", 0}, {"Charlie", 0}};
int candidate_num = 3;

// 模拟计票函数,统计完把票数写入全局数组
void count_votes(void) {
    // 模拟实际计票:Alice5票,Bob3票,Charlie4票
    candidates[0].votes = 5;
    candidates[1].votes = 3;
    candidates[2].votes = 4;
}

// 你问的打印获胜者函数
void print_winner(void) {
    int max_vote = -1;
    // 先找出最高票数
    for (int i = 0; i < candidate_num; i++) {
        if (candidates[i].votes > max_vote) {
            max_vote = candidates[i].votes;
        }
    }
    // 打印所有得最高票的人(支持并列情况)
    printf("获胜者:\n");
    for (int i = 0; i < candidate_num; i++) {
        if (candidates[i].votes == max_vote) {
            printf("- %s\n", candidates[i].name);
        }
    }
}

int main(void) {
    count_votes(); // 先完成计票
    print_winner(); // 再调用打印函数
    return 0;
}

在这个例子里:

  1. 计票函数把票数更新到全局的candidates数组;
  2. print_winner直接读取这个全局数组,算出谁得票最高,然后自行打印结果;
  3. 你只需要确保调用print_winner之前,计票函数已经把票数统计好并更新到共享变量里就行。

另外还有一种可能:计票函数和print_winner用的是文件内的静态变量(加static修饰),这种变量只能在当前文件里访问,但原理和全局变量一样,都是让两个函数共享数据,只是作用域更小而已。

内容的提问来源于stack exchange,提问作者LifeLong21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:42:39