0
printf("\n\tHow many integers: ");
    scanf("%d", &num);

    iPtr = (int*) malloc(num * sizeof(int));

    for(i = 0; i < num; i++) {
        printf("Enter integer # %d ", i + 1);
        scanf("%d", (iPtr + i));

        temp = *(iPtr + i);
        while(temp != 0) {

            if(i == temp % 10) {
                ary[i]++;
            }
            temp /= 10;
        }
    }

    for(i = 0; i < 10; i++) {
        if(ary[i] > 0) {
            printf("digit %d : %d\n", i, ary[i]);
        }
    }

我正在编写一个程序来存储整数中数字的出现,但是当我运行程序时,我看到数组不起作用

所以我想问为什么不允许我存储整数中的数字?以及如何解决?

还有 1 个问题,if(x = y) 和 if(x == y) 有什么区别

4

4 回答 4

1

你的问题是这一行:

if(i == temp % 10)

由于运算符优先级, == 在 % 之前进行评估。通过用括号括起来 % 来修复:

if(i == (temp % 10))

另外,要回答您的其他问题以及一些挑剔的问题(事先道歉):

  • = 是赋值,== 是相等测试。
  • 根据您所说的您正在尝试做的事情,看起来您的内部 while 循环可能正在滥用 i。
于 2013-02-06T01:41:20.437 回答
1

以下循环需要重新考虑

while(temp != 0) {

            if(i == temp % 10) {
                ary[i]++;
            }
            temp /= 10;
        }

我不确定你在这里尝试什么。

首先考虑if(i == temp % 10)

你在这里做的事情太多了。这里 i 与 10 模数 temp 进行比较,如果它们相等,则继续将它们存储到数组中。

所以假设你刚刚开始执行这个循环。所以 i = 0 。假设您输入的第一个数字是 1023 。所以

i = 0
temp = 1023

现在 1023%10 会给你 3 。

因此,您的 if 循环变为if(0 == 3 )// 它是一个相等检查。0 是否等于 3。

显然这将是错误的,因此您的内部数组循环永远不会被执行。

于 2013-02-06T02:51:09.803 回答
1

好的,所以你几乎做对了,但我认为最大的问题是你的数组一开始就有垃圾(声明时)。

 int i, temp, num, *iPtr;
int ary[10] = {0};            //I can only assume you did *not* do this

//printf("\n\tHow many integers: ");
//scanf("%d", &num);
num = 2;

iPtr = malloc(num * sizeof(int));



for(i = 0; i < num; i++) 
{
    printf("Enter integer # %d ", i+1);
    scanf("%d", (iPtr +1));

    temp = *(iPtr+1);
    while(temp != 0) 
    {

        if( (i) == temp % 10)     
        {
            ary[i]++;             
        }

        temp /= 10;
    }
}

for(i = 0; i < 10; i++) 
{
    if(ary[i] > 0) 
    {
        printf("digit %d : %d\n", i, ary[i]);
    }
}

该程序也不完整,因为您的循环可能在您检查到足以匹配的数字之前就结束了。即,您正在检查 temp 中是否仍然有一个数字,但您只是将它与i进行比较,这不会改变(因此,如果 temp 中的数字是 9,但 i 是 1,您将永远不会触发看看有一个 9 数)。

所以我修改了

if( (i) == temp % 10)     
{
    ary[i]++;             
}

        for (int zz = 0; zz < 10; zz++)
        {
            if( (zz) == temp % 10) 
            {
               ary[zz]++;            
            }
        }

现在程序计算所有数字。输出:在此处输入图像描述

这一切都假设我什至理解你的程序是正确的。通常我不喜欢直接发布代码,但我真的不知道如何理解这一点。累了atm。:/

于 2013-02-06T03:45:52.467 回答
0

if(x=y) -> 这是一个赋值运算符。即,您将 y 的值分配给 x。这将始终将 y 分配给 x 并执行其中的语句。

if(x==y) -> 这是一个比较器操作符。在这里,您正在比较 x 的值是否等于 y。如果为 true,它将执行 {} 中的语句,否则不会。

于 2013-02-06T01:54:38.543 回答