二进制格式的字符串到整数

时间:2015-09-20 22:38:34

标签: c

我正在尝试将包含二进制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;
}

2 个答案:

答案 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。