[英]print list and separate values by a comma comma and end with a dot
printf("Open lockers: ");
for(int i = 0; i < sizeof(lockers); i++){
if (lockers[i] == true){
if(i == sizeof(lockers) - 1){
printf(" %d.", i +1);
}else
printf(" %d,", i +1);
}
}
//这是我得到的,但是当我更改列表大小时不起作用
我将通过维护一些其他状态来跟踪此问题,该状态跟踪是否是需要报告的第一个打开的储物柜。 然后,只需在循环外打印一次,即可一次。
printf("Open lockers: ");
int first = 1;
for (int i=0; i < sizeof(lockers); i++) {
if (lockers[i] == true) {
if (first == 0) {
printf(", ");
}
else {
first = 0;
}
printf("%d", i + 1);
}
}
printf(".");
注意:在演示中,我用int
数组替换了bool
lockers数组。 但是其余逻辑保持不变。
一种选择是在此代码中使用类似于pad
的变量:
const char *pad = "";
printf("Open lockers:");
for (int i = 0; i < sizeof(lockers); i++)
{
if (lockers[i])
{
printf("%s %d", pad, i + 1);
pad = ",";
}
}
putchar('.');
另一个变体是:
const char *pad = ":";
printf("Open lockers");
for (int i = 0; i < sizeof(lockers); i++)
{
if (lockers[i])
{
printf("%s %d", pad, i + 1);
pad = ",";
}
}
putchar('.');
请注意,只有在sizeof(lockers[0]) == 1
, sizeof(lockers)
才有效。 我离开它是因为那是您使用的,但是通常我会将变量设置为最大值,然后在循环中使用它。
您的循环条件可能是错误的
for(int i = 0; i < sizeof(lockers); i++){
if (lockers[i] == true){
您不告诉我们什么是lockers
。 当您将其与索引一起使用时,它可能是数组或指向数组的指针。
如果lockers
是一个数组,则sizeof
将导致以字节为单位的大小。 除非元素的类型为char
,否则最终将访问超出其分配内存的数组。 您可以使用sizeof(array)/sizeof(array[0])
获得元素数。
int lockers[10];
使用这样的定义,您将只有40个整数元素。
如果lockers
是指向数组的指针,则sizeof
仅会导致指针的大小(可能为4或8个字节),并且如果数组中的元素数大于4或3,则不会访问指针所指向的数组的所有元素。 8。
int *lockers = malloc(20 * sizeof(int));
使用这样的定义,您将只能访问1或2个元素,而不是20个元素。
更新:在评论中,我发现缺少的信息。 如果您将其放入问题而不是评论中,将会很有帮助。
您很幸运, sizeof(lockers[i])
为1,可以为您的循环工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.