所以我有这个问题,我将打印数组.
输出应该是这样的:
{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]);
}
}
Run Code Online (Sandbox Code Playgroud)
好吧,我怎么能在世界上写出一行中的所有数字,它们应该在大括号之间,用逗号分隔.我假设你应该使用一些指向所有数字的指针.但我是新手,从来没有学过这个,而且相当棘手......
是的,但我想我应该使用指针,如果我没有弄错.
逐行解析问题中的代码.
#include "stdio.h"
Run Code Online (Sandbox Code Playgroud)
标准用途#include <stdio.h>; 你在使用其他任何东西之前就不需要问这个问题,你对C有了更多的了解.
main()
Run Code Online (Sandbox Code Playgroud)
自1999年以来,这一直不是合法的标准C(因为有些C编译器仍然接受它而没有抱怨).您应该始终声明返回类型.我使用int main(void)是因为我没有从我的默认编译器选项中获得错误,但你可以使用int main().
{
int a[10]= {1, 0, 3, 10, 20, 0, 7, 8, 15, 14};
int i;
Run Code Online (Sandbox Code Playgroud)
虽然上面的代码没问题,但是C99编译器允许你编写for (int i = 0; i < 10; i++)并省略i循环之前的定义.
for (i=0; i<10; i++) {
printf("{%d, }", a[10]);
}
Run Code Online (Sandbox Code Playgroud)
正如其他人所指出的,这a[10]是错误的.这是错误的,因为它应该是a[i],因为a[10]超出了数组的末尾,所以你调用未定义的行为.
}
Run Code Online (Sandbox Code Playgroud)
您无法确保显示换行符,也不会向环境返回状态.如果您编写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;
}
Run Code Online (Sandbox Code Playgroud)
形成地址a[10]并与其进行比较是合法的,但取消引用(使用a[10])是不合法的.代码在{之前和之后放置一个空格,}因为这就是我喜欢的数据显示方式.如果您不想要空间,请省略空格.如果你在逗号后面没有空格,也省略它.我发现'pad'技术非常有用,并且在这些场景中经常使用它.你可以加强打印代码来处理必须分成多行的更大的数组(尽管使用数组索引比使用指针更容易),以及其他类似的变体.
样本输出:
{ 1, 0, 3, 10, 20, 0, 7, 8, 15, 14 }
Run Code Online (Sandbox Code Playgroud)
如果您有多行输出,您可能希望将数字很好地对齐.在这种情况下,您必须使用转换规范,例如%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;
}
Run Code Online (Sandbox Code Playgroud)