如何使用无输入无显式输出的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; }
在这个例子里:
- 计票函数把票数更新到全局的
candidates数组; print_winner直接读取这个全局数组,算出谁得票最高,然后自行打印结果;- 你只需要确保调用
print_winner之前,计票函数已经把票数统计好并更新到共享变量里就行。
另外还有一种可能:计票函数和print_winner用的是文件内的静态变量(加static修饰),这种变量只能在当前文件里访问,但原理和全局变量一样,都是让两个函数共享数据,只是作用域更小而已。
内容的提问来源于stack exchange,提问作者LifeLong21
相关产品推荐
相关产品推荐

