同学们!能帮我看看为什么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
请按任意键继续. . . arrayN1 = n1;
arrayN2 = n2;
没显示出来
我自己代码是没有漏掉的 arrayN1[] 和 arrayN2[] 没有足够的容量,导致在为 arrayN1[ i ] 或 arrayN2[ i ] 赋值的时候,因为数组越界访问,侵害到了变量 n2
int arrayN1={0} ; // 很显然问题出在了这里,数组需要确定足够的容量
int arrayN2={0} ; // 很显然问题出在了这里,数组需要确定足够的容量 arrayN1 = n1;
arrayN2 = n2;
除了这两句不对,我这儿输出没有问题
同样的两句printf, 怎么会不一样呢???????????????
jackz007 发表于 2022-11-16 16:48
arrayN1[] 和 arrayN2[] 没有足够的容量,导致在为 arrayN1[ i ] 或 arrayN2[ i ] 赋值的时候,因 ...
先声明的n1,n2,后声明的两个数组,分配内存的时候是肯定 n1, n2在 低地址,数组在高地址,还是不一定谁高谁低呢? 就是数组空间太小了
之后呢你就只要记住,开数组前最好要设置长度,不要写 int a[] = {0}; 这种形式,之后访问、修改就非常容易出错 解决方案:
#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;
} 决定数组长度的不是编译器和系统,而是人来决定数组长度,这样才更不容易出错 学习~ 学习
页:
[1]