gpt4 book ai didi

c - 如何在 C 中漂亮地打印数组

转载 作者:太空宇宙 更新时间:2023-11-04 05:02:56 25 4
gpt4 key购买 nike

所以我有这个问题,我应该在哪里打印数组。
输出应该是这样的:

{element0, element1, element2}

所以我这样写:

#include "stdio.h"

main() {
int a[10] = {1, 0, 3, 10, 20, 0, 7, 8, 15, 14};
int i;

for (i = 0; i < 10; i++) {
printf("{%d, }", a[10]);
}
}

好吧,我怎么能在一行中写出所有数字,它们应该放在大括号之间并用逗号隔开。我假设您应该使用某种指向所有数字的指针。但我是新手,从来没有学过这个,而且它非常棘手..

是的,但如果我没弄错的话,我认为我应该使用指针

最佳答案

分析

或多或少地逐行剖析问题中的代码。

#include "stdio.h"

标准使用#include <stdio.h> ;你最好对 C 有足够的了解,在使用其他任何东西之前不需要问这个问题。

main()

自 1999 年以来,这一直不是合法的 C 标准(尽管一些 C 编译器仍然毫无怨言地接受它)。您应该始终声明返回类型。我会用 int main(void)因为这样我就不会从我的默认编译器选项中得到错误,但你可以使用 int main() .

{
int a[10]= {1, 0, 3, 10, 20, 0, 7, 8, 15, 14};
int i;

虽然上面的代码没问题,但 C99 编译器允许您编写 for (int i = 0; i < 10; i++)并省略 i 的定义在循环之前。

    for (i=0; i<10; i++) {
printf("{%d, }", a[10]);
}

正如其他人所指出的,a[10]是错的。这是错误的,因为它应该是 a[i] ,因为 a[10]超出了数组的末尾,因此您调用了未定义的行为。

}

您不确保出现换行符,也不向环境返回状态。如果你写 C89 代码,你应该有 return 0;最后(但您可以摆脱 main() 的原始声明)。如果你没有 return 0;最后要使用 C99 标准给出的宽限期,你必须有 int main(void)或类似的顶部。你不能同时拥有这两种方式。

综合

问题已更新,表明要使用指针并且 if (i != 0)可能不允许在循环体内。在那种情况下,我可能会写:

#include <stdio.h>

int main(void)
{
int a[10] = { 1, 0, 3, 10, 20, 0, 7, 8, 15, 14 };
int *p = &a[0];
int *end = &a[10];
char *pad = "{ ";

while (p < end)
{
printf("%s%d", pad, *p++);
pad = ", ";
}
printf(" }\n");
return 0;
}

构成a[10]的地址是合法的并与它比较指针,但取消引用它是不合法的(使用 a[10] )。代码在 { 之后放置一个空格在 } 之前因为这就是我喜欢的数据显示方式。如果你不想要那里的空间,省略空间。如果您不希望逗号后有空格,也可以省略它。我发现“垫”技术非常有用,并且在这些场景中经常使用它。您可以增强打印代码以处理必须拆分为多行的更大数组(尽管使用数组索引比使用指针更容易)和其他类似变体。

示例输出:

{ 1, 0, 3, 10, 20, 0, 7, 8, 15, 14 }

如果您有多行输出,您可能希望将数字很好地对齐。在这种情况下,您必须使用转换规范,例如 %2d使所有数字在 2 位数宽的列中右对齐。

泛化

一个更通用的解决方案是使用一个函数来进行打印,更像这样:

#include <stdio.h>

static void print_array(int *array, int size)
{
int *p = array;
int *end = array + size;
char *pad = "{ ";

while (p < end)
{
printf("%s%d", pad, *p++);
pad = ", ";
}
printf(" }\n");
}

int main(void)
{
int a[10] = { 1, 0, 3, 10, 20, 0, 7, 8, 15, 14 };
print_array(a, 10);
print_array(a, 5);
return 0;
}

关于c - 如何在 C 中漂亮地打印数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24589821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com