所有整数具有相同的值

时间:2014-01-23 23:39:12

标签: c

所以我正在做一些功课,我必须在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个元素。我做错了什么?

3 个答案:

答案 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