所以我正在考虑做的是一个小程序,用户输入二进制数(即1010010100111000001),然后将其存储在一个数组中,其中每个数组位置与我的数字的数字相关联。 示例:位[0] = 1,位[1] = 0等。我想到的代码是这个,但我不相信它有效:
int bit [31];
scanf("%i", bit);
请帮忙!
答案 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;
}