gpt4 book ai didi

c - 如何在C中区分 "01"和 "1"

转载 作者:行者123 更新时间:2023-11-30 21:20:08 25 4
gpt4 key购买 nike

我希望用户输入 2 位二进制数。除非我输入“0”或“1”等值,否则下面的示例工作正常。根据定义,0 和 1 不是 2 位二进制,但程序将 01 视为 1,因此从 while 循环中退出。我该如何解决它?基本上,我怎样才能让计算机区分01和1?

int n_bin; 

while(n_bin!=01 && n_bin!=00 && n_bin!=10&&n_bin!=11) {;
printf("Your entered number is %d\n Please enter a 2-digit binary number! \n",n_bin);
scanf("%d",&n_bin);
}

我可以使用char,但我不能使用数组。

最佳答案

int n_bin 的分析无法确定它是否是通过用户输入 "1""01" 分配的。代码需要查看用户输入的点来区分。

<小时/>

使用字符阅读:

读取用户输入,一次一个字符。查找 '0''1''\n'EOF 或其他内容。

int n_bin = 0;
int length = 0;
int ch;
while ((ch = fgetc(stdin)) >= '0' || ch <= '1') {
n_bin = n_bin*2 + (ch - '0'); // *2 as this is base 2
length++;
}

if (ch = '\n' || ch == EOF) {
printf("Value (in decimal):%d Character length:%d\n", n_bin, length);
if (n_bin < 0 || n_bin > 3 || length != 2) puts("Non-conformance"):
} else {
puts("Unexpected character entered");
}
<小时/>

读入int,注意字符偏移量:

如果您需要更高级的方法,请使用“%n”来记录扫描的字符数。

int n_bin;
int start, end;
// v------- Consume leading white-space
// | v----- Store # of characters read
// | | v--- Scan/store int
// | | | v- Store # of characters read
int retval = scanf(" %n%d%n", &start, &n_bin, &end);
if (retval == 1) {
if ((end - start) == 2 && n_bin >= 0 && n_bin <= 3) {
puts("Success");
} else {
puts("Fail");
}
else {
// consume remaining characters in line
http://stackoverflow.com/q/34219549/2410359
puts("Fail");
}

注意:第二种方法将传递类似 "+1" 的输入。

关于c - 如何在C中区分 "01"和 "1",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42811260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com