将前导零存储在C中

时间:2018-09-19 17:10:16

标签: c

对于初学者来说,我是编程的新手

我想知道如何使用scanf而不是修改printf来存储前导零的数字。与数据类型有关吗?如果是这样,那是什么?以及如何使用?我目前只知道int,double和float

例如,我想输入数字“ 02”并接收“ 02”作为输出,当我输入“ 2”时,输出也将为“ 2”。

5 个答案:

答案 0 :(得分:3)

使用scanf说明符diouxa,{ {1}},ef是一个数学数。没有前导零。从概念上讲,数字中没有数字。它是一个纯数学实体。 (正如Jonathan Leffler指出的那样,输入中的前导零是g说明符;前导零会在解释数字时将基数更改为八进制。这仅用于输入;结果仍然是不带数字的数字关联的数字或基数。)

要保留数字的前导零,必须将其视为字符串。 i可以用于读取带有scanfsc指定符的字符串或单个字符,尽管您可能希望使用简单的get-character函数,例如[。您将不得不自己计算前导零。其余的数字也可以作为字符串处理,也可以将它们转换为数字。

答案 1 :(得分:2)

  

如何存储带有前导零的数字(?)
  我目前只知道int,double和float

要存储整数前导零计数为2条信息。阅读用户输入内容时,请记录数字及其其长度或文本宽度。

" "占用空白。
"%n"记录到目前为止已扫描字符的偏移量。这不会影响scanf()的返回值。

int num;
int n1, n2;
if (scanf(" %n%d%n", &n1, &num, &n2) != 1) {
  puts("Failed to read an int");
}

否则,请打印。
"0":用零填充。
"*":从参数列表派生的最小打印宽度。

else {
  int length = n2 - n1;
  printf("%0*d\n", length, num);
}

输入/输出

  007
007

答案 2 :(得分:1)

如果将数字存储为整数(例如int)或浮点类型,则不可避免地会丢失所有格式信息:仅存储数字的二进制表示形式。 (将其保存为数字的 idea 可能会有所帮助,例如“两个”,而不是写时的外观。)

您需要将任何其他信息存储在其他位置,例如,通过保存原始字符串并将其用于输出,或者通过保存位数并将其应用于printf格式来进行存储。还有一些十进制数字库可以在内部保存数字的十进制表示形式,但是比使用本机类型要重得多。

(或者,仅选择一种规范的输出格式,而不论输入如何使用该格式。目标是真的保留任何输入格式吗,还是总是将前导零添加到该位置就足够了吗?输出?)

答案 3 :(得分:0)

如果您有一个int值,在内部它总是表示为一定数量的位(或您的CPU使用的to store numbers),因此您无法对此进行控制。

内部格式始终存在“前导零”,因为例如2099实际上是32位格式的0b00000000000000000000100000110011。由于endian issues,这变得更加复杂,但是原理仍然成立。

只有当您使用的binary coded decimal风格过时或使用sprintf类型的函数产生的字符串符号时,才可以使用零开头。

只有人类在乎数字。就计算机而言,要添加1 + 1就像6916863870493370158 + 6471945999301299985一样困难,因为它们都是64位操作。

答案 4 :(得分:0)

如前所述,数字没有前导零。

但是您可以将其视为字符串

printf("Enter num: ");
char buf[50];
scanf("%s", &buf);
printf("You entered: %s", buf);