C语言模拟投票程序流程图及代码解析

本文将带您深入解析一段C语言代码,该代码模拟了一个简单的投票程序。我们将提供清晰易懂的流程图,并对代码的关键部分进行详细解释。

流程图

开始 -> 创建选手文件(createContestantFile()) -> 读取选手信息(readContestants()) -> 模拟投票过程(simulateVoting()) -> 对选手进行排序(sortContestants()) -> 分配排名(assignRanks()) -> 保存结果(saveResults()) -> 保存日志(saveLog()) -> 结束

代码解析c#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include 'Vote.h'

// 创建选手文件void createContestantFile() { FILE* file = fopen('contestant.txt', 'w'); if (file == NULL) { printf('Failed to create contestant.txt file. '); return; }

// 将选手信息写入文件    fprintf(file, '1 选手1

'); // ... 其他选手信息 fprintf(file, '9 选手9 ');

fclose(file);}

// 读取选手信息Contestant* readContestants(int* numContestants) { FILE* file = fopen('contestant.txt', 'r'); if (file == NULL) { printf('Failed to open contestant.txt file. '); return NULL; }

Contestant* contestants = NULL;    char line[MAX_NAME_LENGTH + 10];    int i = 0;

// 从文件中读取选手信息    while (fgets(line, sizeof(line), file) != NULL) {        (*numContestants)++;        contestants = realloc(contestants, (*numContestants) * sizeof(Contestant));

    sscanf(line, '%d %s', &(contestants[i].number), contestants[i].name);        contestants[i].votes = 0;        contestants[i].rank = 0;        printf('%d %s

', contestants[i].number, contestants[i].name); i++; }

fclose(file);

return contestants;}

// 模拟投票过程void simulateVoting(Contestant* contestants, int numContestants) { printf('输入投票顺序(按0至结束): '); int vote;

while (1) {        scanf('%d', &vote);

    if (vote == 0) {            break;        }

    if (vote < 1 || vote > numContestants) {            printf('无效的参赛者号码。请再次投票.

'); continue; }

    contestants[vote - 1].votes++;    }}

// 对选手进行排序(使用冒泡排序)void sortContestants(Contestant* contestants, int numContestants) {

int i = 0, j = 0;    for (i = 0; i < numContestants - 1; i++) {        for (j = 0; j < numContestants - i - 1; j++) {            if (contestants[j].votes > contestants[j + 1].votes) {                Contestant temp = contestants[j];                contestants[j] = contestants[j + 1];                contestants[j + 1] = temp;            }        }    }}

// 分配排名void assignRanks(Contestant* contestants, int numContestants) { int rank = 1, i = 0;

for (i = numContestants - 1; i >= 0; i--) {        if (i < numContestants - 1 && contestants[i].votes < contestants[i + 1].votes) {            rank++;        }        contestants[i].rank = rank;        printf(' %d	%s	%d	%d

', contestants[i].number, contestants[i].name, contestants[i].votes, contestants[i].rank); }}

// 保存结果void saveResults(Contestant* contestants, int numContestants) { FILE* file = fopen('result.txt', 'w'); if (file == NULL) { printf('Failed to create result.txt file. '); return; } int i = 0; for (i = 0; i < numContestants; i++) { fprintf(file, '%d %s %d %d ', contestants[i].number, contestants[i].name, contestants[i].votes, contestants[i].rank); }

fclose(file);}

// 保存日志void saveLog(char* action) { FILE* file = fopen('Log.txt', 'a'); if (file == NULL) { printf('Failed to open Log.txt file. '); return; }

time_t rawtime;    struct tm* timeinfo;    time(&rawtime);    timeinfo = localtime(&rawtime);

fprintf(file, '[%02d:%02d:%02d] %s

', timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec, action);

fclose(file);}

// ...主函数及其他代码省略

代码说明

  1. 文件操作: 代码使用了 fopen, fprintf, fscanf 等函数进行文件读写操作,实现了选手信息的存储和读取,以及结果的保存。2. 动态内存分配: 使用 realloc 函数根据选手数量动态分配内存,提高了程序的灵活性。3. 排序算法: 代码采用了冒泡排序算法对选手根据票数进行排序,确定排名。4. 数据结构: 代码中可能定义了 Contestant 结构体,用于存储选手的编号、姓名、票数、排名等信息,使程序更加清晰易懂。

总结

本篇文章通过对C语言模拟投票程序代码的解析,向您展示了如何使用C语言进行简单的文件操作、排序、数据处理等操作。希望本文能够帮助您更好地理解C语言编程,并能够运用到实际项目中。

C语言模拟投票程序流程图及代码解析

原文地址: https://www.cveoy.top/t/topic/bdrX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录