gpt4 book ai didi

c - 如何将模块化集成到我的 C 代码中?

转载 作者:行者123 更新时间:2023-11-30 19:37:45 26 4
gpt4 key购买 nike

我对模块化了解不多,除了它基本上是将代码划分为更小的函数组(这个问题是针对 C 语言的)。

我正在做一项作业,我只能看到我的源代码与“main”中的一个巨大嵌套循环一起工作(作业不允许使用 if 语句)。换句话说,如果我尝试使用函数来分割代码,我看不到必要的嵌套循环将如何工作。但这项作业需要尝试模块化。

因此,谁能告诉我如何将以下代码分解成更小的模块而不扰乱其实际执行?

#include <stdio.h>

int main(void)
{
int counter = 0;
int marknum = 0;
int sectioncode, studentnumber;
int dummyvariable = 0;
int index;
int marks;
int total = 0;

do
{
printf("Enter a Section Code: ");
scanf("%d", &sectioncode);

while(sectioncode > 4 || sectioncode < 1)
{
printf("Invalid value entered. Must be 1 to 4, please re-enter: ");
scanf("%d", &sectioncode);
}

do
{
printf("Enter the Student's ID: ");
scanf("%d", &studentnumber);

while (studentnumber < 1 || studentnumber > 999999999)
{
printf("Invalid value entered. Must be 1 to 999999999. Please re-enter: ");
scanf("%d", &studentnumber);
}

while (sectioncode != 0)
{
while (counter < 5)
{
counter++;
marknum++;
printf("Enter mark%d: ", marknum);
scanf("%d", &marks);
total = total + marks;
}

printf("%09d's total mark is %d\n", studentnumber, total);
counter = 0;
marknum = 0;
sectioncode = 0;
}

dummyvariable = 1;

} while (dummyvariable = 0);

} while (sectioncode != 0);

return 0;
}

另外,我将如何整合这个模块(基本上是同一问题):

#include <stdio.h>

int main(void)
{
int num; //User inputted number
int i; //Increment variable
char ch; //Check for characters variable

do //Begin "do while" loop
{
printf("\nEnter a number:"); //User prompt
scanf ("%d", &num); //Scan for user inputted integer
while ( (ch = getchar()) != '\n') //Scan for character, check for non-numeric input
{
printf("Invalid number entered. Please re-enter: "); //Error message and prompt for invalid user input
scanf ("%d", &num); //Scan for user inputted integer
} //Repeat loop if condition becomes true again

for (i=0; i<num; i++) //Begin "for" loop; condition prints asterisks equal to user number; increment i by 1
{
printf("*"); //Prints a single asterisk each loop until i is less than num
}
} while (num!=0); //Stop "do while" loop if user enters 0

return 0;
}

最佳答案

通常我建议你问你的老师而不是在这里问家庭作业问题,但正如丹尼尔在评论中指出的那样,使用循环和额外变量只是为了避免代码中出现 if 语句是愚蠢的,我我不确定告诉你向一位认为这是个好主意的导师寻求建议对我来说是完全负责任的行为。所以,话虽如此:

在这种情况下,您想要寻找的是多个相似代码块,或者概念上执行单一操作的代码块。然后看看是否可以将这些 block 拆分成一个函数。

在第一个示例中,您显示提示、读取用户输入并验证 sectioncodestudentnumber 的输入。该过程可以分为一个单独的功能。 (从 printf("Enter ...") 到 while 循环结束的所有内容。)然后在 main 函数中,您只有类似

的内容
sectioncode = readval("Enter a Section Code: ", 1, 4);
studentnumber = readval("Enter the Student's ID: ", 1, 999999999);
对于第二个示例,该输入/验证代码没有重复,但它仍然可能值得拆分为一个函数,因为它执行一个明确定义的事情,并且跨越足够多的行,将其拆分为一个函数可能有助于使其余代码的逻辑更加清晰。但在这种情况下,它没有第一种情况那么重要。

<小时/>

还有一个不相关的问题:在其中一个 do-while 结束时,您有 while (dummyvariable = 0);。注意单个等号。您将 0 分配给虚拟变量,而不是进行比较。

在这种特殊情况下,它无论如何都会起作用,因为整个表达式的计算结果为 0(即 false),就像 (dummyvariable == 0) 一样。但如果该常量是其他值,或者如果您在循环结束之前没有将 dummyvariable 设置为 1,那么这将是一个错误。

我强烈建议始终将常量放在表达式的左侧,以便在编译时捕获此类错误。 while (dummyvariable = 0) 默默地做一些意想不到的事情; while (0 = dummyvariable) 将在编译时给出错误,您可以修复它。

关于c - 如何将模块化集成到我的 C 代码中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39323318/

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