如何使用格式说明符读取标准输入

时间:2014-10-28 00:00:05

标签: c format specifier

我想扫描数值并在数字前加0,直到它长4位数。

示例:

scanf("%d",&value); //entering '4'..modify the scan somehow with format specifier?  
printf("%d",value); //prints 0004

或其他例子:

scanf("%d",&value); //entering '12'  
printf("%d",value); //prints 0012

或其他例子:

scanf("%d",&value); //entering '123'  
printf("%d",value); //prints 0123

并且对于扫描值已经是4位数的情况,请忽略。

有像printf("%04d",value)这样的格式说明符,但是在扫描语句中指定格式对我来说至关重要。

输入:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

我的输出

            _______1_______
           /                  \
     __2__                __3__
    /        \              /        \
     4         5             6         7
  / \        / \          / \        / \
 8     9    10   11     12    13    14   15

它不像我喜欢的那样排队,因为我硬编码了所有数字长度为4的情况。

期望的输出:(排队很好)

                _______0001_______
               /                  \
         __0002__                __0003__
        /        \              /        \
      0004      0005          0006      0007
      / \        / \          / \        / \
   008   009  0010 0011   0012  0013  0014 0015

目前如何调用:

int main()
{
int q[100];
int inputValue;
int qSize=1;

while (inputValue != -1) //scanning until -1 is reached
   {
   cin >> inputValue; //here is each number

//What can I add here to make it 4 digits long? (i.e. adding 0's)

   if (inputValue != -1)
    insertAndSort (q, qSize, inputValue); //sorts a heap
   }

 drawSortedTree (q, qSize);//output
}

3 个答案:

答案 0 :(得分:0)

这样做:

scanf("%d", &value);    //entering '12'  
printf("%04d", value);  //prints 0012

答案 1 :(得分:0)

您说printf ("%04d", value);不是您想要的 - 您想在输入语句中指定格式,但您的示例不会在输入中指定前导零。但如果他们这样做,保留它们的唯一方法就是捕获整个字符串。

int main()
{
    int value;
    char string[100];
    scanf ("%s", string);
    value = atoi (string);
    printf( "%d\n", value);
    printf( "%s\n", string);
    return 0;
}

答案 2 :(得分:0)

Scanf(%40d",x); 
//wont work

你可以扫描&将值打印为字符串 只需输入00001,00002,00003 .....                        而不是1,2,3 ...... ....