如何创建一个整数数组,其中每个数组位置是我的数字的一个数字?

时间:2015-04-03 12:53:28

标签: c arrays integer

所以我正在考虑做的是一个小程序,用户输入二进制数(即1010010100111000001),然后将其存储在一个数组中,其中每个数组位置与我的数字的数字相关联。 示例:位[0] = 1,位[1] = 0等。我想到的代码是这个,但我不相信它有效:

int bit [31];
scanf("%i", bit);

请帮忙!

3 个答案:

答案 0 :(得分:1)

主要问题是如何确保用户输入有效的二进制数,即仅为0和1。您可以尝试逐个字符地读取输入,并使用标准的sscanf格式检查输入是否有效:%[01]。您还应该将输入的大小限制为单个字符。因此最终格式为:%1[01]

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]) {
    int bits[31];
    char input[2];
    int i;
    int j;

   fprintf(stdout, "Enter at most 31 bits: ");
   for(i=0; i<31 && 1 == fscanf(stdin, "%1[01]", input); ++i)
        bits[i] = (input[0]=='1' ? 1 : 0);

   fprintf(stdout, "You entered: \n");
   for(j=0; j<i; ++j)
       fputc(bits[j]?'1':'0', stdout);
   fprintf(stdout, "\n");
   return 0;
}

答案 1 :(得分:0)

没有错误检查,您需要的代码是

char bitstream[31];
scanf("%30s", bitstream);

答案 2 :(得分:0)

#include <stdio.h>

int main(void) {
    char line[64];
    int bit[32];
    int i, n;

    scanf("%32[01]", line);//fgets(line, sizeof(line), stdin);//input up to newline
    for(i = 0; i < 32; ++i){
        if(1!=sscanf(&line[i], "%1d", &bit[i]))//read one digit
            break;
    }
    n = i;
    for(i = 0; i < n; ++i){
        printf("%d", bit[i]);
    }
    putchar('\n');

    return 0;
}