C无法存储到数组中

时间:2013-02-06 01:33:05

标签: c arrays

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

答案 0 :(得分:1)

你的问题是这一行:

if(i == temp % 10)

由于operator precedence,在=%之前评估==。用括号括住%来修复:

if(i == (temp % 10))

<击>

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

  • =是赋值,==是相等测试。
  • 根据你所说的你想要做的事情,看起来你的内在循环可能会误导我。

答案 1 :(得分:1)

以下循环需要重新考虑

while(temp != 0) {

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

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

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

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

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

i = 0
temp = 1023

现在1023%10会给你3。

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

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

答案 2 :(得分: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,但我是1,你永远不会触发看到有9来计算)。

所以我修改了

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

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

现在程序计算所有数字。 输出:enter image description here

这是假设我甚至理解你的程序。通常我不喜欢直接发布代码,但我真的不知道如何解决问题。累了的atm。 :/

答案 3 :(得分:0)

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

if(x == y) - &gt;这是一个比较运算符。在这里,您要比较x的值是否等于y。如果为true,它将执行{}内的语句,否则不会。