未被驯化的甲鱼 发表于 2022-11-16 16:34:58

同学们!能帮我看看为什么n2会变成1吗?

#include <stdio.h>
int main(int argc, char *argv[])
{
        int n1,n2;//分子 分母
    int arrayN1[]={0};//存分子
    int arrayN2[]={0};//存分母
    int n;//循环次数
    printf("输入循环次数:");
    scanf("%d",&n);
    printf("确认输入的循环次数n为 %d\n",n);
    printf("输入分数,每个用空格隔开\n");
    for (int i = 0; i < n; ++i) {
      scanf("%d/%d",&n1,&n2);
      printf("1看看scanf n1=%dn2=%d\n",n1,n2);
      arrayN1 = n1;
      arrayN2 = n2;
      printf("2看看scanf n1=%dn2=%d\n",n1,n2);
    }
        return 0;
}
=============================
运行结果

输入循环次数:3
确认输入的循环次数n为 3
输入分数,每个用空格隔开
1/2 1/2 1/2
1看看scanf n1=1n2=2
2看看scanf n1=1n2=2
1看看scanf n1=1n2=2
2看看scanf n1=1n2=1          (这里n2变为1了,为什么??)
1看看scanf n1=1n2=2
2看看scanf n1=1n2=2
请按任意键继续. . .

未被驯化的甲鱼 发表于 2022-11-16 16:38:11

arrayN1 = n1;
arrayN2 = n2;
没显示出来
我自己代码是没有漏掉的

jackz007 发表于 2022-11-16 16:48:47

      arrayN1[] 和 arrayN2[] 没有足够的容量,导致在为 arrayN1[ i ] 或 arrayN2[ i ] 赋值的时候,因为数组越界访问,侵害到了变量 n2
      int arrayN1={0} ; // 很显然问题出在了这里,数组需要确定足够的容量
      int arrayN2={0} ; // 很显然问题出在了这里,数组需要确定足够的容量

两手空空儿 发表于 2022-11-16 17:02:38

arrayN1 = n1;
arrayN2 = n2;

除了这两句不对,我这儿输出没有问题
同样的两句printf, 怎么会不一样呢???????????????

两手空空儿 发表于 2022-11-16 17:06:23

jackz007 发表于 2022-11-16 16:48
arrayN1[] 和 arrayN2[] 没有足够的容量,导致在为 arrayN1[ i ] 或 arrayN2[ i ] 赋值的时候,因 ...

先声明的n1,n2,后声明的两个数组,分配内存的时候是肯定 n1, n2在 低地址,数组在高地址,还是不一定谁高谁低呢?

zhangjinxuan 发表于 2022-11-16 17:07:44

就是数组空间太小了
之后呢你就只要记住,开数组前最好要设置长度,不要写 int a[] = {0}; 这种形式,之后访问、修改就非常容易出错

zhangjinxuan 发表于 2022-11-16 17:09:03

解决方案:

#include <stdio.h>
int main(int argc, char *argv[])
{
    int n1,n2;//分子 分母
    int n;//循环次数
    printf("输入循环次数:");
        scanf("%d",&n);
        int arrayN1;//存分子
        int arrayN2;//存分母
    printf("确认输入的循环次数n为 %d\n",n);
    printf("输入分数,每个用空格隔开\n");
    for (int i = 0; i < n; ++i) {
      scanf("%d/%d",&n1,&n2);
      printf("1看看scanf n1=%dn2=%d\n",n1,n2);
      arrayN1 = n1;
      arrayN2 = n2;
      printf("2看看scanf n1=%dn2=%d\n",n1,n2);
    }
    return 0;
}

zhangjinxuan 发表于 2022-11-16 17:11:06

决定数组长度的不是编译器和系统,而是人来决定数组长度,这样才更不容易出错

lxping 发表于 2022-11-16 21:57:01

学习~

Dada1 发表于 2022-11-17 00:12:07

学习
页: [1]
查看完整版本: 同学们!能帮我看看为什么n2会变成1吗?