【发布时间】:2019-11-24 20:20:56
【问题描述】:
我正在尝试编写一个程序,它从用户那里获取字符串输入“0”和“1”,然后使用给定的字符串来更改另一个变量的每一位。
即
char input[20];
unsigned short bits = 0;
printf("Enter a binary string of 16 bits.\n");
fgets(input, 20, stdin);
input[strlen(input) - 1] = '\0';
是我必须从用户那里获取和存储一个两字节字符串的东西。然后我想获取该字符串并操作变量“位”以匹配输入的内容。
因此,如果用户输入 10011001 10011001,我想将“无符号短位”的值从全 0 更改为二进制的匹配值。
我现在的想法是,我可以遍历输入字符串并在每次传递时左移“位”,但据我所知,左移总是会丢弃最左边的位并添加一个 0 作为最右边的位。有没有办法用一些我不知道的按位命令将 1 添加为最左边的位,以便如果循环在字符串中看到“1”,它会在最右边的位上添加一个?
【问题讨论】:
-
对于字符串的每个字符,将
unsigned short bits左移并将位0设置为字符串中的值。如果输入的位数比需要的少,它仍然可以工作。 -
我不认为
input[strlen(input) - 1] = '\0';是正确的。 -
删除了我之前的评论,因为我认为我误读了您的问题。但是,“添加 1 作为最左边的位”是错字吗?您指的是“正确”吗?
-
@LegendofPedro 可以,但不能保证有效。请看Removing trailing newline character from fgets() input
-
@WeatherVane 这是很好的信息。我在想如果你使用管道
echo ""并且输入长度为零且没有换行符的字符串会发生什么。
标签: c