我正在尝试将包含二进制16位数字的字符串转换为整数值。 这是一项家庭作业,我必须使用scanf("%1d ....)。 我遇到的问题是循环不会结束,我不知道如何解决它。
例如:
输入:0000000000001111
输出:15
int read_binary_value()
{
int value = 0;
while( scanf("%1d", &value) == 1)
{
printf("%d ", value);
if (value == 1)
{
value += 1;
value << 1;
}
}
printf("yoyoyoyoyoyoyo");
printf("%d",value);
return value;
}
答案 0 :(得分:1)
我修改了你的代码并且它可以正常工作
int read_binary_value()
{
int total=0;
int value;
while( scanf("%1d", &value) == 1)
{
printf("%d", value);
if(!(value==0||value==1))
{
//Generate Error Message and Exit program
}
total = total << 1;
if (value == 1)
{
total += 1;
}
}
printf("yoyoyoyoyoyoyo\n");
printf("%d",total);
return total;
}
你的循环在文件结束时停止。 对于Windows,按 CTRL + Z ,对于linux,按 Ctrl + D 。那些是文件结束字符。
答案 1 :(得分:0)
如果您想获得16个输入,您可以使用
for(i=0;i<16;i++)
代替while
只运行循环16次并结束。或者你可以在while
循环中给出
if(i==16)
break;
在循环结束时递增i
。如果您需要手动停止循环,可以选择EOF
char。