【问题标题】:All Integers have the same value所有整数都具有相同的值
【发布时间】:2014-01-23 23:39:12
【问题描述】:

所以我正在做一些作业,其中我必须创建一个由 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 个元素。我做错了什么?

【问题讨论】:

标签: c


【解决方案1】:

你有两个错误。

首先,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】:

    您正在使用"%d" 打印带有printf 的char 数组,该数组用于打印整数。使用"%s" 打印字符数组:

     printf("%s\n", str, gt75);
    

    或者,如果您尝试将 gt75 的值打印为整数:

    printf("%d\n", gt75);
    

    我不知道为什么你会在这种情况下传递str

    当您使用"%d" 时,您是在告诉printf 将输入解释为int。由于str实际上是一个char数组,所以输出不正确。相反,您打印的是 str 的内存位置,这是一个数组的值。

    【讨论】:

    • 那为什么str的参数紧跟在你的格式字符串后面呢?
    • @F3AR3DLEGEND str 不是整数。甚至它的内容看起来像一个整数,str的类型是char[],因此你必须使用%s来打印它。
    • @F3AR3DLEGEND 您到底要打印什么“整数”?如果您尝试打印 gt75 的值,请将其传递给 printf,紧跟在格式字符串之后,中间不带 str
    【解决方案3】:

    您总是打印str 的值,而不是int

    【讨论】:

      猜你喜欢
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      相关资源
      最近更新 更多