在为我的计算机科学课做项目时,我遇到了数组问题。基本上,我必须从用户那里获取他们想要输入数据的年数。然后我必须使用该输入来创建两个数组(一个用于他们想要数据的实际年份,一个用于数据本身)。然后我必须打印出用户输入的年份和数据。
问题在于,当我这样做时,这些年的数据打印得很好,但这些年份本身打印为随机存储器地址。另一个问题是,这种情况只发生在三年或更长时间。当我做两个或更少时,其他一切都很好。年份的变量是一个int,数据的变量是double。
int numberofyears;
printf("Enter the number of years you wish to take data for: " );
scanf("%d",&numberofyears); //take input for how many times arrays run
int years[numberofyears];
double dataforyear[numberofyears];
int a;
printf("Enter the years and their respective data");
for (a=0;a<numberofyears;a++){
scanf("%d %lf",&years[a],&dataforyear[a]);} //take inputs for both arrays
int b;
for (b=0;b<numberofyears;b++){
printf("%d %.2lf\n",years[b],dataforyear[b]);}
输入:
Enter the number of of years you wish to take data for: 5
Enter the years and their respective data
1950 200.96
2000 300.55
打印出来:
1950 200.96
2000 300.55
输入:
Enter the number of of years you wish to take data for: 5
Enter the years and their respective data
1956 325.21
1989 386.22
2003 400.00
打印出来:
0 325.21
1081671680 386.22
2003 400.00
超过3年的任何其他事情都会做到这一点。虽然看起来超过5年的事情不会像过去那样保持去年的任何原因,如果这有帮助的话。
答案 0 :(得分:2)
你是如何宣布你的dataforyear[]
阵列的?
如果是float dataforyear[]
,则将您的scanf语句更改为
scanf("%d %f",&years[a],&dataforyear[a]);
如果您希望保留double dataforyear[]
语句,则将数组声明为scanf
。
答案 1 :(得分:1)
这些行:
int years[numberofyears];
double dataforyear[numberofyears];
可能是问题所在。编译器需要在编译时知道数组的大小。否则,您将不得不为阵列分配内存。如果您的程序不需要读取大量数据,则可以始终通过指定其大小来避免分配内存。
int years[10];
double dataforyear[10];