处理C中的数组时出现问题

时间:2014-11-12 10:59:30

标签: c

我试图理解如何在C中正确使用数组并尝试编写一个简单的程序,它应该采用5整数数组并消除左边的零。这是我的尝试:

#include <stdio.h>

int main() {
    int seq[5];
    int i;
    int cor[5];
    int counter;
    printf("Type the 5 numbers: ");
    scanf("%s", &seq);
    for (i=0; i<5; i++){

        if (seq[i] != 0) {
            for (counter=0; counter<5-i; counter++){
                cor[counter]=seq[i+counter];
            }
            break;
        }
    }
    printf("%s", cor);
    return 0;
}

这个想法是当输入诸如00101之类的东西时,程序将查看每个条目并检查它是否为0.如果不是,则在位置i,它将写入一个新的数组,其中0 -th位置在i处被赋予原始数组的值,第i个位置将被赋予i + 1处的值,依此类推,然后它将打印这个新数组,该数组在左边没有任何无用的零。但它只是打印原始数组。怎么了?对于begginner的问题,我们深表歉意。

2 个答案:

答案 0 :(得分:1)

您不能将字符串存储在整数数组中。您必须在字符数组中存储字符串。

答案 1 :(得分:1)

你有两种方法可以做你想做的事。

  1. 使用字符:

    #include <stdio.h>
    
    int main() {
        char seq[6]; /* reserve one place for terminating null */
        int i;
        char cor[5];
        int counter;
        printf("Type the 5 digits : ");
        scanf("%5s", seq); /* limit to 5 chars and seq is already an array : ne & */
        for (i=0; i<5; i++){
            /* should control seq[i] >= '0' && seq[i] <= '9' */
            if (seq[i] != '0') {
                for (counter=0; counter<6-i; counter++){ /* also copy terminating null */
                    cor[counter]=seq[i+counter];
                }
                break;
            }
        }
        printf("%s", cor);
        return 0;
    }
    

    但是用户可以给你不是数字的字符。

  2. 使用ints:

    #include <stdio.h>
    
    int main() {
        int seq[5];
        int i;
        int cor[5];
        int counter;
        printf("Type the 5 numbers: ");
        i = scanf("%d%d%d%d%d", seq, seq+1, seq+2, seq+3, seq+4); /* seq+i = &(seq[i]) */
        /* should control i == 5 */
        for (i=0; i<5; i++){
    
            if (seq[i] != 0) {
                for (counter=0; counter<5-i; counter++){
                    cor[counter]=seq[i+counter];
                }
                break;
            }
        }
        printf("%d%d%d%d%d", cor[0], cor[1], cor[2], cor[3], cor[4]);
        return 0;
    }