Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 用逗号打印列表和分隔值,并以点结束 printf(“打开储物柜”); 对于(int i=0;i_C - Fatal编程技术网

C 用逗号打印列表和分隔值,并以点结束 printf(“打开储物柜”); 对于(int i=0;i

C 用逗号打印列表和分隔值,并以点结束 printf(“打开储物柜”); 对于(int i=0;i,c,C,//这是我得到的,但它不适用于当我更改列表大小时,我会通过维护一些额外的状态来实现这一点,以跟踪它是否是需要报告的第一个打开的储物柜。然后,只需打印循环外的周期,仅打印一次 printf("Open lockers: "); for(int i = 0; i < sizeof(lockers); i++){ if (lockers[i] == true){ if(i == sizeof(lockers) - 1){ printf(" %d."

//这是我得到的,但它不适用于当我更改列表大小时,我会通过维护一些额外的状态来实现这一点,以跟踪它是否是需要报告的第一个打开的储物柜。然后,只需打印循环外的周期,仅打印一次

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(“打开储物柜”);
int first=1;
对于(int i=0;i


注意:在演示中,我用
int
数组替换了
bool
储物柜数组。但其余逻辑保持不变。

一个选项是在此代码中使用类似于
pad
的变量:

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(".");
const char*pad=”“;
printf(“开放式储物柜”);
对于(int i=0;i
另一个变体是:

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(“开放式储物柜”);
对于(int i=0;i

请注意,
sizeof(储物柜)
仅当
sizeof(储物柜[0])==1时才起作用。我留下它是因为您使用了它,但我通常会将一个变量设置为最大值,并在循环中使用它。

您的循环条件可能是错误的

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('.');
使用这样的定义,您可以访问40个整数元素,而您只有10个

如果
lockers
是指向数组的指针,
sizeof
将只产生指针的大小(可能是4或8字节),并且如果数组中的元素多于4或8个,您将无法访问指针指向的数组的所有元素

int lockers[10];
对于这样的定义,您只能访问1或2个元素,而不是20个

更新: 在评论中,我找到了缺失的信息。如果你把它放在问题中而不是评论中,那会有很大帮助


您很幸运,
sizeof(lockers[i])
为1,这将适用于您的循环。

您还需要提供一个参数,并告诉我们您获得的输出与您想要的输出。你至少需要告诉我们什么是储物柜。最有可能的是
sizeof(lockers)
并不是你想象的那样。lockers是list我希望程序在不考虑大小的情况下工作,显然
lockers
是你正在谈论的列表,但是
lockers
是如何声明的?不要在
printf(“%d,”,i+1)的格式字符串中包含逗号
@Sterben请不要像这样戏剧性地改变你的问题。如果您对我的答案有疑问,请在我的答案下发表评论。没有,我试过了,但输出是打开的储物柜:1、、2、、4、、6、,。而不是1,2,4,6。@Sterben我刚刚测试了这段代码,它似乎可以工作。哦,是的,很抱歉我忘了在printf中去掉逗号(“%d,”,i+1);很抱歉,谢谢你的帮助time@Sterben复制/粘贴在此处很有用;-)100%是我的错对不起
int lockers[10];
int *lockers = malloc(20 * sizeof(int));