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));