如果语句C内部没有更新数组

时间:2014-07-30 10:33:17

标签: c arrays if-statement modulus

在下面的代码中,我试图计算给定int中不同奇数的数量。为此,我首先使用模数将整数分成单个数字的整数,然后将所有奇数放入数组oddInts中。这工作正常,但数组似乎只在if语句中保存值。在if语句之外,数组似乎有一堆随机数。

我的问题是,我如何修改if语句中的数组,以便之后可以操作数组。

#include <stdio.h>
#include <math.h>

int lenHelper(unsigned x) {
    if(x>=1000000000) return 10;
    if(x>=100000000) return 9;
    if(x>=10000000) return 8;
    if(x>=1000000) return 7;
    if(x>=100000) return 6;
    if(x>=10000) return 5;
    if(x>=1000) return 4;
    if(x>=100) return 3;
    if(x>=10) return 2;
    return 1;
}

int main(int argc, const char * argv[])
{
    int inputInt=987654;
    int size=lenHelper(inputInt);
    int input[size];
    int count=0;
    // int oddCount=0;
    int oddInts[5];

    for (int i=0; i<size; i++) {
        input[i]=inputInt%10;
        inputInt=inputInt/10;

        if (input[i]%2==1) {
            //  oddCount=input[i];
            oddInts[i]=input[i];
            printf("%d", oddInts[i]);
        }
    }
    return 0;
}

4 个答案:

答案 0 :(得分:1)

如果我已经正确理解,那么数组oddInts必须保持原始数字中每个奇数位的频率。如果是这样,那么代码可以采用以下方式

// preceding declarations

int main(int argc, const char * argv[])
{
    unsigned int inputInt = 987654;
    int size = lenHelper( inputInt );
    unsigned int input[size];
    unsigned int oddInts[5] = { 0 };

    for ( int i = 0; i < size; i++ ) 
    {
        input[i] = inputInt % 10;
        inputInt = inputInt / 10;

        if ( input[i] % 2 == 1 ) 
        {
            int j = ( input[i] - 1 ) / 2;
            oddInts[j]++;
            printf( "%d\t%d", input[i], oddInts[j] );
        }
    }

    return 0;
}

至于我,那么我会按照以下方式编写程序(使用C99之前的C)

#include <stdio.h>

#define BASE    10

int main( void ) 
{
    while ( 1 )
    {
        unsigned int oddInts[BASE / 2] = { 0 };
        unsigned int x = 0;
        unsigned int i;

        printf( "Enter a positive integer number (0 - exit): " );

        scanf( "%u", &x );

        if ( !x ) break;

        do 
        {
            unsigned int digit = x % BASE;

            if ( digit % 2 == 1 ) oddInts[(digit - 1 ) / 2]++;
        } while ( x /= BASE );

        for ( i = 0; i < BASE / 2; i++ )
        {
            printf( "\n%u\t%u", 2 * i + 1, oddInts[i] );
        }
        puts( "" );
    }

    return 0;
}

如果输入是

1234576543
0

然后输出

Enter a positive integer number (0 - exit): 1234576543
1   1
3   2
5   2
7   1
9   0
Enter a positive integer number (0 - exit): 0

答案 1 :(得分:0)

现在,当数字不是奇数时,你什么都不做,所以数组中的这些元素可能包含垃圾,这就是你在那里有随机数的原因。 我添加了&#34;否则&#34;代码,以帮助您了解问题的原因。

 for (int i=0; i<size; i++) {
    input[i]=inputInt%10;
    inputInt=inputInt/10;

    if (input[i]%2==1) {
        //  oddCount=input[i];
        oddInts[i]=input[i];
        printf("%d ", oddInts[i]);
    } else {
        oddInts[i] = 0; //the digit is not odd
    }
}


for (i=0; i<size; i++) {
        printf("%d\n", oddInts[i]);
}

此外,您的代码不会计算不同的奇数。它只是用数字中的所有奇数位填充数组oddInts。 它不会对它们进行计数,也不会检查数字是否不同。

答案 2 :(得分:0)

int main(int argc, const char * argv[])
{

    int value=0;     //Newly added variable

    for (int i=0; i<size; i++) {
        input[i]=inputInt%10;
        inputInt=inputInt/10;

        if (input[i]%2==1) {
            //  oddCount=input[i];
            oddInts[value]=input[i];     //oddInts[] is updated  
            printf("%d", oddInts[value]);//oddInts[value] is printed
            value++;                     //'value' is incremented
        }
    }
    return 0;
}

答案 3 :(得分:0)

#include<stdio.h>
#include <math.h>

int lenHelper(unsigned x) {
        if(x>=1000000000) return 10;
        if(x>=100000000) return 9;
        if(x>=10000000) return 8;
        if(x>=1000000) return 7;
        if(x>=100000) return 6;
        if(x>=10000) return 5;
        if(x>=1000) return 4;
        if(x>=100) return 3;
        if(x>=10) return 2;
        return 1;
}

int main(int argc, const char * argv[])
{
        int inputInt=987654;
        int size=lenHelper(inputInt);
        int input[size];
        int count=0,i,k=0;
        /* int oddCount=0; */
        int oddInts[5];

        for ( i=0; i<size; i++)
        {
                input[i]=inputInt%10;
                inputInt=inputInt/10;
                if (input[i]%2==1)
                {
                        //  oddCount=input[i];
                        oddInts[k]=input[i];
                        k++;
                }
        }

        for(i=0;i<k;i++)
        {
                printf("%d", oddInts[i]);
        }
        return 0;
}