woainilp 发表于 2020-5-13 16:34:39

C语言

#include <stdio.h>
void main()
{
        int a={1};
        int i;
        scanf("%d",&a);
        for(i=1;i<=3;i++)
                a=a+a;
        printf("a=%d\n",a);
}
这个程序我找到一处不对的,i<3;
我还有一点不明白为什么要用scanf呢,是不是给a赋初值

ba21 发表于 2020-5-13 16:46:01

for(i=1;i<=3;i++) // 循环次数没问题
&a == &a // 是同一个地址 , 所以&a 是给 a赋值。

先不说你理不理解,这本来就是一段问题代码。

#include <stdio.h>
void main()
{
      int a={1};
      int i;
      scanf("%d",&a);
      for(i=0;i<3;i++)
                a=a+a;
      printf("a=%d\n",a);
}

sunrise085 发表于 2020-5-13 16:49:12

scanf用法有点问题,这样写会有语法警告,但不是语法错误,这样是给 a 赋值,而不是 a 。
你所找出的错误 i<=3,的确有下标越界,但是下标越界算不算语法错误,与编译器有关,有的编译器不允许下标越界,会报错;但是有的编译器允许下标越界,这样的编译器下标越界不报错,但是运行结果可能会不对,因为越界单元所取出来的值是不受控的,不知道会是什么值。
另外数组a,只有a赋初值了,其他单元都没有赋初值。虽然能有运算,但是相加结果是什么呢?这是不确定的,因为a和a的值不确定

xiaosi4081 发表于 2020-5-13 17:57:20

1.在scanf里,数组前不需要加&
2.在for循环那里,要改成i<3

#include <stdio.h>
void main()
{
      int a={1};
      int i;
      scanf("%d",a);
      for(i=0;i<3;i++)
                a=a+a;
      printf("a=%d\n",a);
}
页: [1]
查看完整版本: C语言