2013-02-06 44 views
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个以上的问题,什么是不同的,如果(X = Y)(X == Y)之间,如果

+0

这不是C#,它是C. – dasblinkenlight

+1

请仅询问一个问题,并澄清什么是“不工作”。你期望什么?你观察到了什么? –

回答

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是否还有一个数字,但你只是将它与,它不会改变(所以如果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。 :/

+0

哇,我试过了,它是工作:D,所以我的逻辑错了,噢,谢谢你:D –

+0

谢谢你们:D –

1

你的问题是这样的一行:

if(i == temp % 10) 

由于operator precedence, ==在%之前被评估。

if(i == (temp % 10)) 

此外,为了回答您的其他问题,以及一些吹毛求疵(事先道歉):受周围用方括号括%修正

  • =是赋值,==是平等测试。
  • 它看起来像你的内在while循环可能会滥用我,根据你所说的你想要做的。
+0

我试过如果(i ==(temp%10)),但它仍然不允许我存储 ,最后的循环将打印所有有价值的元素,但没有任何打印 –

+1

除非我读取错误,您的运营商优先级链接列出[==]上方的模数[%]。我只是测试了那个特定的比较,它按预期工作。你的建议似乎不正确。 – Hydronium

+0

@Alex你是对的;我认为真正的错误可能是我错误地使用了我。 – congusbongus

0

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

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

1

下面的循环需要重新考虑

while(temp != 0) { 

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

我不知道你想在这里。

首先想到过if(i == temp % 10)

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

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

i = 0 
temp = 1023 

现在1023%10会给你3。

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

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

+0

但我正在使用while循环,所以它会除以10并再次进行比较,直到temp不为0 –

+0

Rex是正确的。他正在做一个模10做十进制移位。他会比较1023%10 = 3,然后是102%10 = 2,然后是10%10 = 0(找到宾果数字),然后是1%10 = 1。 – Hydronium