gpt4 book ai didi

c - 不确定如何为测验程序构建代码。

转载 作者:太空宇宙 更新时间:2023-11-04 07:17:00 25 4
gpt4 key购买 nike

在过去的 3 天里,我为家庭作业编写+删除+编写+删除代码,但我已经无计可施了。这是我这学期第一次被难倒,我开始有点发疯了。

基本思路:

创建一个通用的多项选择测验程序

问题将按如下结构存储在文本文件中:

  • 问题

  • 选择的个数

  • 选择本身(每一个都在一个新行上)

  • 正确答案

一切都很好,但让我发疯的是每个问题的选择数量不同,而且它们在同一个文件中。

有人可以看看我到目前为止的代码并给我一些指导吗?这是作业,我不想要答案,只想要一些帮助!

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct _question {
char question[50];
int numChoices;
int numChoicesLine;
char choices[100][100];
char correctAns[50];
} Question;


void getQuestion (FILE file, int *firstLine) {

// init struct
Question q;

// array to store lines in the file
char lines[100][100];

int i = 0; // counter

// read all lines into lines array
while(fgets(lines[i], 100, &file))
{
// keep track of how many lines there are in the file
++i;
}

// i want j to reference the first line of each new question set
int j = *firstLine;

// get the question
strcpy(q.question, lines[j]);
printf("%s", q.question);

// get number of choices
for (int j = *firstLine; j < i; ++j)
{
// if the line is a number store that number into numChoices and which line of the file
// the number is found

if(atoi(lines[j]))

{
q.numChoices = atoi(lines[j]);
q.numChoicesLine = j;
break;
}
}

// store choices in array lines[k]
int k = 0;
for (k = q.numChoicesLine+1; k <= q.numChoices + 1; ++k)
{
// loop from the first choice to the last choice

fgets(lines[k], 100, &file);
strcpy(q.choices[k],lines[k]);
printf("-%s", q.choices[k]);
}

// store correct ans
// after the above loop, k refers to the line of the last choice in the quiz
strcpy(q.correctAns, lines[k]);

// set the firstLine to the line that stores the question for the next set
*firstLine = k + 1;
}


int main()
{
// open file
FILE *files;
files = fopen("tickle.txt", "r");
int firstLine = 0; // the first time it will be 0
getQuestion(*files, &firstLine);
return 0;
}

数据文件示例:

Who is the President of the USA?

3

George Bush

Michael Jordan

Barack Obama

Barack Obama

What country lies north of Mexico?

2

USA

Canada

USA

最佳答案

这里有一些有用的要点:

将您的 getQuestion 函数分解为几个较小的函数。尝试以能够准确表示函数功能的方式命名您的每个函数。

想想您可以编写一次并重复使用的帮助程序/实用程序函数。

思考如何使您的代码更清晰、更易于阅读、理解、修改和维护。

代码如下:

void GetQuestion ()
{
DoStep1();
DoStep2();
DoStep3();
}

void DoStep1()
{
DoStep1A();
DoStep1B();
DoStep1C();
}

void DoStep2()
{
DoStep2A();
DoStep2B();
DoStep2C();
}

void DoStep3()
{
DoStep3A();
DoStep3B();
DoStep3C();
}

比这样的代码更有条理:

void GetQuestion()
{
... // Step 1a
... // Step 1b
... // Step 1c
... // Step 2a
... // Step 2b
... // Step 2c
... // Step 3a
... // Step 3b
... // Step 3c
}

“DoStep”可能不是您的任何函数的好名称。我将这些名称用作占位符,以便您了解如何命名您自己的函数。

关于c - 不确定如何为测验程序构建代码。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23793184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com