描述
牛牛从键盘上输入三个整数,并尝试在屏幕上显示第二个整数。
输入描述:
一行输入 3 个整数,用空格隔开。
输出描述:
请输出第二个整数的值。
作答:
#include <stdio.h>
int main()
{
int a[] = {0}; //初始化 注释1
scanf("%d %d %d", &a);//插入三个整数分别插入到到数组a 注释2
printf("%d\n", a[1]); //将数组中下标为1的数据用整型打印 注释3
return 0;
}
问题一 注释二
scanf插入数据时 每一个数据都要表面插入地址 不能直接囊括整个数组
问题一解决后的代码
#include <stdio.h>
int main()
{
int a[] = {0}; //初始化 注释1
scanf("%d %d %d", &a[1],&a[2],&a[3]);//插入三个整数分别插入到到数组a中下标0 1 2的位置 注释2
printf("%d\n", a[1]); //将数组中下标为1的数据用整型打印 注释3
return 0;
}
问题二 注释一
由于数组内具体的元素数量没有说明(a[]) 因此程序根据数组里的数据自动向内存申请空间大小,而上面代码只申请了一个整型数据元素的空间(空间大小为四个字节) 而注释2代码要插入3个元素 ,故程序会报错
解决办法一
规定具体的数据空间大小(最好),这样插入3个元素 就有足够的空间 正确答案中就规定了数组里三个元素 3个元素为整型数据 因此向内存申请了12个字节的空间
解决方法二
在创立数组时输入三个元素 此时程序自动申请了三个元素(整型数据元素)的空间(12个字节) 后续插入也不会报错,但此为下策,因为自动申请的空间 可能会导致出现内存溢出的问题 导致程序报错
正确答案
#include <stdio.h>
int main()
{
int add[3] = {0,0,0};
scanf("%d %d %d", &add[0],&add[1],&add[2]);
printf("%d\n", add[1]);
return 0;
}