所以我正在做一些功课,我必须在0到99之间创建一个包含500个随机整数的全局数组。然后,我必须计算有多少大于75,有多少小于50。
这是我的代码:
#include <stdlib.h>
#include <stdio.h>
static int ARRAY[500];
static char str[1];
void main() {
int i = 0;
for (i = 0; i < 500; i++) {
int r = rand() % 99;
ARRAY[i] = r;
}
int gt75 = count75();
int lt50 = count50();
printf("%d\n", str, gt75);
printf("%d\n", str, lt50);
}
int count75() {
int i = 0, counter = 0;
for (i = 0; i < 500; i++) {
int n = ARRAY[i];
if (n > 75) {
counter += 1;
}
}
return counter;
}
int count50() {
int i = 0, counter = 0;
for (i = 0; i < 500; i ++) {
int n = ARRAY[i];
if (n < 50) {
counter += 1;
}
}
return counter;
}
但是,在编译并运行我的程序后,我得到以下输出:
4225008
4225008
这可能不对,因为列表首先应该只有500个元素。我做错了什么?
答案 0 :(得分:4)
使用printf
打印带"%d"
的char数组,用于打印整数。使用"%s"
打印字符数组:
printf("%s\n", str, gt75);
或者,如果您尝试将gt75
的值打印为整数:
printf("%d\n", gt75);
我不知道为什么你会在这种情况下通过str
。
当您使用"%d"
时,您告诉printf
将输入解释为int
。由于str
实际上是一个char数组,因此无法正确输出。相反,您打印的是str
的内存位置,这是数组的值。
答案 1 :(得分:4)
你有两个错误。
首先,int r = rand() % 99;
应为int r = rand() % 100;
否则,您只需获得0到98之间的数字。
其次,你的printf语句很奇怪。他们应该是:
printf("Greater than 75: %d\n", gt75);
printf("Less than 50: %d\n", lt50);
在当前的printf语句中,str被强制转换为int,它将str指针解释为int,从而产生奇怪的输出。
答案 2 :(得分:3)
您始终打印的str
值不是int
。