限制 C 中的循环
Limiting a loop in C
我已经为作业编写了一个程序。我遇到的问题是我不知道如何制作一个 for 循环来限制可以输入的数据量。例如,对于此作业,用户可以输入比方说 100 个等级。关于如何以及在何处添加 for 循环的任何建议?
#include <stdio.h>
#include <stdlib.h>
/* Kimberly Brand - IT2240 * 05/17/2022
*/
int main (void) {
// defines a max of 100
#define maxnum 100
int i, grade[maxnum], maxentered;
i = 0;
printf ("Welcome! \n");
printf ("Please enter your grades, enter -1 when finished \n\n");
// while statemtn accepts numbers over 0
while (i < 100) {
printf ("please enter your grade ");
scanf ("%i", & grade[i]);
// ends program if - 1 is entered
if (grade[i] == -1) { //max entered only accepts 100
maxentered = i;
i = 100;
} else
i++;
}
printf ("Your grades are :\n");
for (i = 0; i < maxentered; i++) {
// displays grade entered
printf ("%i", grade[i]);
printf ("\n");
}
printf ("Thank you!\n");
}
您可以使用 break
语句退出循环,而不是直接将 i
设置为 100
。
https://en.cppreference.com/w/cpp/language/break
// ...
while (i < 100) {
printf ("please enter your grade ");
scanf ("%i", & grade[i]);
// ends program if - 1 is entered
if (grade[i] == -1) { //max entered only accepts 100
maxentered = i;
break; // <<< NEW
} else
i++;
}
// ...
您是说要更改 while 循环 用于 for 循环?
您的 while 循环已经非常成功地限制了数据量。
while (i < 100) {
printf ("please enter your grade ");
scanf ("%i", & grade[i]);
// ends program if - 1 is entered
if (grade[i] == -1) { //max entered only accepts 100
maxentered = i;
i = 100;
} else
i++;
}
如果您将 (i < 100) 更改为 (i < 5),您的代码将限制条目的数量数组为 5,即使它可以存储 100 个条目。
但是在这种情况下,for-loop 可能比 while 循环更好。它看起来像这样:
for(i = 0; i < 100; i++){
//And then just add the code you want to execute inside
//I would recommend using a 'break;' statement instead of relying
//on 'i = 100' to break out of the loop.
}
作为旁注,您从未给 maxentered 一个默认值,因此如果您从不键入 -1,您的程序将会崩溃但是而是输入循环允许的尽可能多的成绩。
while
是一个循环结构,你已经限制了可以读取的数据量。
如果您将 maxentered
初始化为 maxnum
(对于在用户输入 -1
之前达到限制的事件),并更改循环的边界(以避免 magic number 100 可能与数组的大小不同步),这个程序会工作得很好(假设 scanf
永远不会失败)。
#include <stdio.h>
#include <stdlib.h>
/* Kimberly Brand - IT2240 * 05/17/2022
*/
int main (void) {
// defines a max of 100
#define maxnum 100
int i, grade[maxnum], maxentered = maxnum;
i = 0;
printf ("Welcome! \n");
printf ("Please enter your grades, enter -1 when finished \n\n");
// while statemtn accepts numbers over 0
while (i < maxnum) {
printf ("please enter your grade ");
scanf ("%i", & grade[i]);
// ends program if - 1 is entered
if (grade[i] == -1) { //max entered only accepts 100
maxentered = i;
i = 100;
} else
i++;
}
printf ("Your grades are :\n");
for (i = 0; i < maxentered; i++) {
// displays grade entered
printf ("%i", grade[i]);
printf ("\n");
}
printf ("Thank you!\n");
}
也就是说,它可以稍微清理一下。
始终检查 scanf
的 return 值是否为发生的 预期成功转换次数 。我们希望发生一次转换,因此我们希望 return 值为 1
.
一旦循环完成,原始索引变量可以被认为是保存数组中有效条目的长度。这可以在访问数据时作为新绑定重用。
size_t
是索引内存和处理对象大小的合适类型。虽然对于较小的数据结构来说并不重要,但练习是一个好习惯。
#include <stdio.h>
#define MAX_ENTRIES 100
int main(void) {
int grades[MAX_ENTRIES];
size_t len = 0;
printf("Welcome!\nPlease enter your grades, enter -1 when finished.\n\n");
while (len < MAX_ENTRIES) {
printf("Please enter your grade: ");
if (1 != scanf("%d", &grades[len])) {
fprintf(stderr, "Failed to read input.\n");
return 1;
}
if (grades[len] == -1)
break;
len++;
}
printf("Your grades are:\n");
for (size_t i = 0; i < len; i++)
printf("[#%zu] %d\n", i + 1, grades[i]);
printf("Thank you!\n");
}
我已经为作业编写了一个程序。我遇到的问题是我不知道如何制作一个 for 循环来限制可以输入的数据量。例如,对于此作业,用户可以输入比方说 100 个等级。关于如何以及在何处添加 for 循环的任何建议?
#include <stdio.h>
#include <stdlib.h>
/* Kimberly Brand - IT2240 * 05/17/2022
*/
int main (void) {
// defines a max of 100
#define maxnum 100
int i, grade[maxnum], maxentered;
i = 0;
printf ("Welcome! \n");
printf ("Please enter your grades, enter -1 when finished \n\n");
// while statemtn accepts numbers over 0
while (i < 100) {
printf ("please enter your grade ");
scanf ("%i", & grade[i]);
// ends program if - 1 is entered
if (grade[i] == -1) { //max entered only accepts 100
maxentered = i;
i = 100;
} else
i++;
}
printf ("Your grades are :\n");
for (i = 0; i < maxentered; i++) {
// displays grade entered
printf ("%i", grade[i]);
printf ("\n");
}
printf ("Thank you!\n");
}
您可以使用 break
语句退出循环,而不是直接将 i
设置为 100
。
https://en.cppreference.com/w/cpp/language/break
// ...
while (i < 100) {
printf ("please enter your grade ");
scanf ("%i", & grade[i]);
// ends program if - 1 is entered
if (grade[i] == -1) { //max entered only accepts 100
maxentered = i;
break; // <<< NEW
} else
i++;
}
// ...
您是说要更改 while 循环 用于 for 循环?
您的 while 循环已经非常成功地限制了数据量。
while (i < 100) {
printf ("please enter your grade ");
scanf ("%i", & grade[i]);
// ends program if - 1 is entered
if (grade[i] == -1) { //max entered only accepts 100
maxentered = i;
i = 100;
} else
i++;
}
如果您将 (i < 100) 更改为 (i < 5),您的代码将限制条目的数量数组为 5,即使它可以存储 100 个条目。
但是在这种情况下,for-loop 可能比 while 循环更好。它看起来像这样:
for(i = 0; i < 100; i++){
//And then just add the code you want to execute inside
//I would recommend using a 'break;' statement instead of relying
//on 'i = 100' to break out of the loop.
}
作为旁注,您从未给 maxentered 一个默认值,因此如果您从不键入 -1,您的程序将会崩溃但是而是输入循环允许的尽可能多的成绩。
while
是一个循环结构,你已经限制了可以读取的数据量。
如果您将 maxentered
初始化为 maxnum
(对于在用户输入 -1
之前达到限制的事件),并更改循环的边界(以避免 magic number 100 可能与数组的大小不同步),这个程序会工作得很好(假设 scanf
永远不会失败)。
#include <stdio.h>
#include <stdlib.h>
/* Kimberly Brand - IT2240 * 05/17/2022
*/
int main (void) {
// defines a max of 100
#define maxnum 100
int i, grade[maxnum], maxentered = maxnum;
i = 0;
printf ("Welcome! \n");
printf ("Please enter your grades, enter -1 when finished \n\n");
// while statemtn accepts numbers over 0
while (i < maxnum) {
printf ("please enter your grade ");
scanf ("%i", & grade[i]);
// ends program if - 1 is entered
if (grade[i] == -1) { //max entered only accepts 100
maxentered = i;
i = 100;
} else
i++;
}
printf ("Your grades are :\n");
for (i = 0; i < maxentered; i++) {
// displays grade entered
printf ("%i", grade[i]);
printf ("\n");
}
printf ("Thank you!\n");
}
也就是说,它可以稍微清理一下。
始终检查 scanf
的 return 值是否为发生的 预期成功转换次数 。我们希望发生一次转换,因此我们希望 return 值为 1
.
一旦循环完成,原始索引变量可以被认为是保存数组中有效条目的长度。这可以在访问数据时作为新绑定重用。
size_t
是索引内存和处理对象大小的合适类型。虽然对于较小的数据结构来说并不重要,但练习是一个好习惯。
#include <stdio.h>
#define MAX_ENTRIES 100
int main(void) {
int grades[MAX_ENTRIES];
size_t len = 0;
printf("Welcome!\nPlease enter your grades, enter -1 when finished.\n\n");
while (len < MAX_ENTRIES) {
printf("Please enter your grade: ");
if (1 != scanf("%d", &grades[len])) {
fprintf(stderr, "Failed to read input.\n");
return 1;
}
if (grades[len] == -1)
break;
len++;
}
printf("Your grades are:\n");
for (size_t i = 0; i < len; i++)
printf("[#%zu] %d\n", i + 1, grades[i]);
printf("Thank you!\n");
}