在此代码的数字scanf()
中,如果我输入input 01234567,则printf()
函数将输出1234567,而不会输出0。该如何解决该问题?
#include<stdio.h>
int main()
{
long int number , date , month , year ;
char name[50];
printf("Enter name \n");
gets(name);
printf("Enter mobile number\n");
scanf("%ld",&number);
printf("Enter date of birth(date)\n");
scanf("%ld",&date);
printf("Enter date of birth(month)\n");
scanf("%ld",&month);
printf("Enter date of birth(year)\n");
scanf("%ld",&year);
///printing starts
printf("Name: %s\n",name);
printf("Number: %ld\n",number);
printf("DOB: %ld/%ld/%ld",date,month,year);
return 0;
}
对于数字部分, 此代码显示输出:1234567,但输入为01234567
预期输出:01234567
答案 0 :(得分:2)
数字 1、01、0000001、1.0等之间没有真正的区别,依此类推(a)。那是因为数字是值,而不是格式。
如果要保留前导零,则应该将其视为字符串而不是数字。
如果您在谈论电话号码(这似乎是手头的问题),尤其如此,因为电话号码可能以许多形式出现,不符合简单的整数,例如为:
handleClick = name => {
const inputName = this.refs.name;
console.log("Name before being changed: " + inputName.value); // this works
var event = new Event("input", { bubbles: true });
this.setNativeValue(inputName, name);
inputName.dispatchEvent(event);
};
setNativeValue = (element, value) => {
const valueSetter = Object.getOwnPropertyDescriptor(element, "value").set;
const prototype = Object.getPrototypeOf(element);
const prototypeValueSetter = Object.getOwnPropertyDescriptor(
prototype,
"value"
).set;
if (valueSetter && valueSetter !== prototypeValueSetter) {
prototypeValueSetter.call(element, value);
} else {
valueSetter.call(element, value);
}
};
您还应该对0413 198 234
(0407) 123-456
0412 diablo
保持谨慎,这是为什么它实际上已从标准中删除的少数原因之一,这是有原因的-没有安全的使用方法。相反,请研究许多更安全的选择中的任何一种,例如here。
(a)显然,在数学量方面。在C源代码中,就使用的数据类型或基数而言,它们可能会有所不同。
答案 1 :(得分:2)
printf("Number: %011ld\n",number);
这将在0
前面加上前缀,使其按照OP的要求是11个字符。因此, 01234567 将变为 00001234567
答案 2 :(得分:1)
要打印前导零,代码可以用数字输入的"%n"
记录长度,以便以后打印。
printf("Enter mobile number\n");
int n1 = 0;
int n2 = 0;
// v------------ consume leading spaces.
// |vv---vv----- record offset of scan
scanf(" %n%ld%n",&n1, &number, &n2);
// v--------------- pad with zeros as needed
// |v-------------- width determined by argument
printf("Number: %0*ld\n", n2-n1, number);