我正在尝试完成一个程序,但是当它作为int读取时,前导零会被删除。如果用户在开始时输入零,则我需要这个前导零。因为我正在使用它在程序的后面进行数学运算,而不能只是在printf中添加前导零。
printf("Enter the first 6 digits of the barcode: \n");
scanf("%i", &n1);
printf("Enter the first 6 digits of the barcode: \n");
scanf("%i", &n2);
//Splits number1 into individual digits
count1 = 0;
while (n1 != 0){
array1[count1] = n1 % 10;
n1 /= 10;
count1++;
}
count2 = 0;
while (n2 > 0){
array2[count2] = n2 % 10;
n2 /= 10;
count2++;
//Steps 1-3
int sumo = array1[5]+array1[3]+array1[1]+array2[5]+array2[3]+array2[1]; //adds odd
int sume = array1[4]+array1[2]+array1[0]+array2[4]+array2[2]; //adds even without 12
int sumd = 3*sumo; //multiplies odds
int sum = sume+sumd; //adds above and evens
int chec = sum%10;
int check = 10-chec;
可以找到整个程序here
答案 0 :(得分:2)
当您将值存储为整数时,前导零总是会丢失,因此您需要将值存储为其他值(可能是字符串)
答案 1 :(得分:0)
您应该将输入扫描为字符串而不是int。您以后可以使用atoi
将其更改为int(用于计算总和)。
答案 2 :(得分:0)
int中使用的前导零
首先,通过以下方式改进代码:
检查scanf()
的返回值。
当通过十进制输入可以使用前导零时,请确保使用"%d"
而不是"%i"
。对于"%i"
,前导0表示八进制输入。 @Antti Haapala。仅借助帮助OP即可完成此更改。
"%d" "012" --> 12 decimal
"%d" "078" --> 78 decimal
"%i" "012" --> 10 decimal
"%i" "078" --> 7 decimal, with "8" left in stdin
找到领先的'0'
的各种方法如下:
要计算输入的字符数,请使用int
记录"%n"
前后的扫描位置。 "%n"
对scanf()
的返回值没有贡献。
int n1;
int offset1, offset2;
if (scanf(" %n%d%n", &offset1, &n1, &offset2) == 1) {
int width = offset2 - offset1;
printf("%0*d\n", width, n1);
}
这会计算个字符,而不仅仅是数字 ,因为"+123"
的宽度为4。
一种更强大的方法是将输入作为 string 读取,然后对其进行处理。
// printf("Enter the first 6 digits of the barcode: \n");
char buf[6+1];
if (scanf(" %6[0-9]", buf) == 1) {
int n1 = atoi(buf);
int width = strlen(buf);
printf("%0*d\n", width, n1);
}