如何从C中的scanf输入中获取所有0

时间:2016-04-02 00:51:11

标签: c scanf

我是C的新手,需要一些帮助。 我想将所有零保存到变量中。

E.g:

    int number1 = 0;
     int number2 = 0;
     int number3 = 0;

     printf("Please enter the number in the following format( int,int,int)");
     scanf("%d,%d,%d", &number1, &number2,  &number3);

 // Let's say user enters 1,000,000 (a million)
 // I want to be able to print each of the numbers such as
 // number1 = 1 
 // number2 = 000
 // number3 = 000

当我为1,000,000做一个printf语句时,我只得到1,0,0

我的最终目标是将该十进制数转换为二进制数

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

如果要保留前导零,则应将值读取为字符串,而不是整数。

答案 1 :(得分:2)

发布的代码正在读取三个整数,以逗号分隔。

自然,结果是1和0和0

关于这个陈述:

// Let's say user enters 1,000,000 (a million)

我们可以把它读成百万,但是发布的代码(读取三个整数,用逗号分隔)只能看到1和0和0

要保留所有零,请将整个输入作为char数组读取。然后通过先挤出逗号然后转换为单个整数来解析生成的char数组中的实际数字。

编辑:

建议的算法来解析实际值

char buffer[100];
int inputNum;
if( fgets(buffer, sizeof(buffer), stdin) ) 
{
    for( char *source = buffer, char *destination = buffer;
        *source;
        source++ )
    {
        if( isdigit( *source ) )
        {
            *destination = *source;
            destination++;
        }
    }
    *destination = '\0';
    inputNum = atoi( buffer );
}

有更简单的方法,例如:

char buffer[100]; 
int inputNum = 0;

if( fgets(buffer, sizeof(buffer), stdin) ) 
{ 
    for( int i=0; buffer[i]; i++) 
    { 
        if( isdigit(buffer[i]) 
        { 
            inputNum *= 10; 
            inputNum += (buffer[i] - '0');
        } 
    }
}

答案 2 :(得分:2)

试试这个:

char number1[80];
char number2[80];
char number3[80];

printf("Please enter the number in the following format(int,int,int)\n");
scanf(" %[0-9] , %[0-9] , %[0-9]", number1, number2, number3);

printf("%s, %s, %s", number1, number2, number3);

要将字符串转换为int,您可以编写atoi(numberx)