C语言:for循环输出数组的问题

#include<stdio.h>
int main()
{
int n,i,a[5];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);

}
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
为什么是错的?

#include<stdio.h>
#include<stdlib.h>

typedef int ElemType;

typedef int Status;

typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;

void CreateList_L(LinkList &L, int n)
{
LinkList p;

//逆向输入n个元素的值
L = (LinkList)malloc(sizeof(LNode));
//建立一个带头结点的单链表
L->next = NULL;
for (int i = n; i>0; --i)
{
//生成新的结点
p = (LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
////printf("%d ",p->data);
p->next = L->next;
L->next = p;
}
}
Status LinkInsert_L(LinkList&L, int i, ElemType e)
{
//在带头结点的单链线性表L中第i个位置之前插入元素e
LinkList p = L;
LinkList s;
int j = 0;

//在带头结点的单链表L中第i个元素之前插入元素e
while (p&&j<i - 1)
{
p = p->next;
++j;
}
//如果i小于1或者大于表长加1,则返回ERROR
if (!p || j>i - 1)
{
printf("ERROR\n");
return 0;
}
s = (LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
return 1;
}
Status LinkDelete_L(LinkList&L, int i, ElemType &e)
{
//在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
LinkList p = L;
int j = 0;

while (p->next&&j < i - 1)
{
//寻找第i个结点,并令p指向其前趋
p = p->next;
++j;
}
if (!p->next || j>i - 1)
{
printf("ERROR\n");
return 0;
}
LinkList q;
q = p->next;
p->next = q->next;
e = q->data;
free(q);
return 1;
}
int main()
{
LinkList w;
int n;

printf("请输入n的值:");
scanf("%d", &n);
//创建一个单链表
printf("请逆序输入元素:");
CreateList_L(w, n);
ElemType e;
LinkList y = w;
////printf("%d ",y->next->data);
for (int i = 0; i < n; i++)
{
y=y->next;
printf("%5d",y->data);
}
printf("\n");
int z;
int x;
printf("请输入要插入位置:");
scanf("%d", &z);
printf("请输入要插入元素:");
scanf("%d", &x);
if(LinkInsert_L(w, z, x))
{
printf("元素%d已插入\n",x);
n++;
}
else
printf("插入失败\n");
y = w;
for (int j = 0; j < n; j++)
{
y = y->next;
e = y->data;
printf("%5d", e);
}
printf("\n");
int r;
int t;
printf("请输入要删除位置:");
scanf("%d", &r);
if(LinkDelete_L(w, r, t))
{
printf("元素%d已删除\n",t);
n--;
}
else
printf("删除失败\n");
y = w;
for (int h = 0; h < n; h++)
{
y = y->next;
e = y->data;
printf("%5d", e);
}
printf("\n");
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-05-04
第一在你没有加a[i]=i之前,由于没有给数组赋值,所以里面的值是随机的。
第二你加了a[i]=i,我猜你没有为for循环加大括号,所以代码就变成了
for(i=0;i<=9;i++)
a[i]=i;

printf("%d",a[i]);
这段代码你应该就清楚了,他输出的是a[10](越界了),一个随机值
第2个回答  2015-05-04

    你在输出之前没有为数组a[10]中元素赋初始值,所以输出什么结果都是完全有可能的。

     你在printf之间加一句 a[i] = i,那么会一直执行这一句,而printf值是单独的一个语句,而且他显示的值也超出数组的边界了,因此此时i为10。

第3个回答  2018-05-16
for(i=0;i<5;++i){
for(j=0;j<3;++j){
scanf("%d",&box[i][j]);
}
}
如果是这种形式的就输一个数按一次回车。本回答被网友采纳
第4个回答  2018-05-16
循环一次打印一次,第二个For东西和第一个放一起追答

还有你N要干嘛

代码应该是你想要的结果
#include
void main(void)
{
int n;
int a[i];
printf("输入数字的个数?");
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}

奉劝你代码格式按规则写,要不然同事打死你的心都有

相似回答