【问题标题】:'For' loop in C loops endlessly [closed]C中的'For'循环无休止地循环[关闭]
【发布时间】:2018-12-02 22:46:27
【问题描述】:

我知道以前有人问过这个问题,但我一直找不到可以应用于我的案例的答案。

我无法让这个 For 循环结束。我确定这很简单,谁能告诉我我做错了什么?

#include <stdio.h>
int main ()
{
  /* variable definition: */
  char StudentName[100];
  float ExamValue, Sum, Avg;
  int students, exams;
  int Total_Students;

    printf("Enter total number of students: \n");
    scanf("%d", &Total_Students);

   // Loop through x students
  for (students = Total_Students; students++;)
  {
     // reset Sum to 0
     Sum =0.0;  
     printf("Enter Student Name \n");
     scanf("%s", StudentName); 

     // Nested Loop for Exams
    for (exams=0; exams < 3; exams++)
    {
        printf ("Enter exam grade: \n");
        scanf("%f", &ExamValue);
        Sum += ExamValue;
    }   
    Avg = Sum/3.0;
    printf( "Average for %s is %f\n",StudentName,Avg);
  }
  return 0;
}

【问题讨论】:

  • for (students = Total_Students; students++;) 应该做什么?你可能想要for (students = 0; students &lt; Total_Students; students ++) 这样的东西,不是吗?
  • 现在是了解调试器的好时机。

标签: c infinite-loop


【解决方案1】:

在预期循环 x 个学生的外部循环中,实际上是从 x 个学生开始,一直到无穷大。您应该从零开始,并以“学生总数”为界限。

【讨论】:

  • 它不是“去无穷大”而是结束...
【解决方案2】:

此代码可以解决您的问题。 你应该这样设置条件,准确设置起点,终点

#include <stdio.h>
int main()
{
/* variable definition: */
char StudentName[100];
float ExamValue, Sum, Avg;
int students, exams;
int Total_Students;

printf("Enter total number of students: \n");
scanf_s("%d", &Total_Students);

// Loop through x students
// you should make condition like this, set the start, end point accurately
for ( students = Total_Students; students>0; students--)
{
    // reset Sum to 0
    Sum = 0.0;
    printf("Enter Student Name : \n");
    scanf_s("%s", StudentName,sizeof(StudentName));
    getchar();

    // Nested Loop for Exams
    for (exams = 0; exams < 3; exams++)
    {
        printf("Enter exam grade: \n");
        scanf_s("%f", &ExamValue);
        Sum += ExamValue;
    }
    Avg = Sum / 3.0;
    printf("Average for %s is %f\n", StudentName, Avg);
}
return 0;
}

【讨论】:

  • 请解释为什么原始代码行为不端。
  • 代码中只有两个更正@Matthieu 1. for (students = Total_Students;students>0;students--) -> 让学生总计并与学生一起迭代-- 2.scanf_s( "%s", StudentName,sizeof(StudentName)); -> String 不会出错
  • 我知道。你只需要明确地说出哪些为什么,这样你的答案就有意义了。现在它只是一段代码,说“现在去弄清楚自己”......
  • 不要编辑评论,编辑你的答案以包括你的解释。
  • 好的兄弟,现在很酷吗?
猜你喜欢
  • 2020-01-24
  • 2020-04-26
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 2016-02-09
  • 1970-01-01
  • 2017-02-19
相关资源
最近更新 更多