如何将模块化集成到C语言的代码中?

如何将模块化集成到C语言的代码中?,c,function,module,modularity,C,Function,Module,Modularity,我对模块化不太了解,除了它基本上是将代码分成更小的函数组(这个问题是针对C语言的) 我正在做一个赋值,我只能看到我的源代码在“main”中使用一个巨大的嵌套循环(如果赋值允许使用if语句,则不允许)。换句话说,如果我尝试使用函数来分割代码,我看不到必要的嵌套循环将如何工作。但分配需要尝试模块化 因此,有人能告诉我如何将下面的代码分解成更小的模块,而不影响其实际执行吗 #include <stdio.h> int main(void) { int counter = 0;

我对模块化不太了解,除了它基本上是将代码分成更小的函数组(这个问题是针对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;
}
#包括
内部主(空)
{
int计数器=0;
int-marknum=0;
int段代码,学生编号;
int-dummyvariable=0;
整数指数;
整数标记;
int-total=0;
做
{
printf(“输入区段代码:”);
scanf(“%d”、§ioncode);
而(sectioncode>4 | | sectioncode<1)
{
printf(“输入的值无效。必须是1到4,请重新输入:”;
scanf(“%d”、§ioncode);
}
做
{
printf(“输入学生ID:”);
scanf(“%d”和studentnumber);
while(studentnumber<1 | | studentnumber>9999999)
{
printf(“输入的值无效。必须是1到99999999。请重新输入:”;
scanf(“%d”和studentnumber);
}
while(sectioncode!=0)
{
while(计数器<5)
{
计数器++;
marknum++;
printf(“输入标记%d:”,marknum);
scanf(“%d”、&marks);
总数=总数+分数;
}
printf(“%09d的总分为%d\n”,学生编号,总计);
计数器=0;
marknum=0;
sectioncode=0;
}
dummyvariable=1;
}而(dummyvariable=0);
}while(sectioncode!=0);
返回0;
}
另外,我将如何为这一个整合模块化(基本上是同一个问题):

#包括
内部主(空)
{
int num;//用户输入的数字
int i;//增量变量
char ch;//检查变量中的字符
do//开始“do while”循环
{
printf(“\n输入一个数字:”;//用户提示
scanf(“%d”,&num);//扫描用户输入的整数
((ch=getchar())!='\n')//扫描字符,检查非数字输入
{
printf(“输入的数字无效。请重新输入:”;//错误消息并提示用户输入无效
scanf(“%d”,&num);//扫描用户输入的整数
}//如果条件再次变为真,则重复循环

对于(i=0;i通常我建议你在这里向你的老师提问,而不是问家庭作业问题,但正如Daniel在评论中指出的那样,使用循环和额外变量只是为了避免在代码中使用if语句是愚蠢的,我不确定告诉你从一位认为这是个好主意的老师那里得到建议是否是正确的就我而言,这是一种负责任的行为。因此,尽管如此:

在这种情况下,您需要查找多个类似代码块,或者概念上只做一件事的代码块。然后看看是否可以将这些代码块拆分为一个函数

在第一个示例中,显示提示,读取用户输入,并验证
sectioncode
studentnumber
的输入。该过程可以拆分为一个单独的函数。(从
printf(“输入…”)到while循环结束的所有内容。)然后在main函数中,您只需要

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


另外,还有一个不相关的问题:在其中一个do while的末尾,您有
while(dummyvariable=0);
。请注意一个等号。您将0赋值给dummyvariable,而不是比较

在这个特殊的例子中,它仍然有效,因为整个表达式的计算结果为0(即false),就像
(dummyvariable==0)
一样。但是如果该常量是其他常量,或者如果在循环结束之前没有将dummyvariable设置为1,那将是一个错误


我强烈建议始终将常量放在表达式的左侧,以便在编译时捕获此类错误。
while(dummyvariable=0)
悄悄地执行意外操作;
while(0=dummyvariable)
将在编译时给出一个错误,您可以修复它。

老实说,我试图首先理解您现有的循环。尤其是
while(sectioncode!=0)
循环和
while(dummyvariable=0)缺少它
分配循环条件。不管怎样,显然收集正确的部分代码,同样正确的学生id,可以被隔离到他们自己的函数中。老实说,如果你的代码有效,它属于像你这样的领域问题。第二个片段可以被分成两个从属函数加上main。第一个从属函数d读取并返回一个数字。它应该采取更多的预防措施(例如EOF)。第二个从属功能是打印循环。这些都很简单。您应该
sectioncode = readval("Enter a Section Code: ", 1, 4);
studentnumber = readval("Enter the Student's ID: ", 1, 999999999);