C 使用sprintf将整数转换为字符串似乎忽略了0
当我使用输入“01”运行以下代码时,value的值为1,忽略0。但是,如果输入“301”时0不在第一个位置,代码将正常工作C 使用sprintf将整数转换为字符串似乎忽略了0,c,string,integer,printf,C,String,Integer,Printf,当我使用输入“01”运行以下代码时,value的值为1,忽略0。但是,如果输入“301”时0不在第一个位置,代码将正常工作 int input; printf("Enter an number: \n"); scanf(" %d", &input); char array[10]; int value = sprintf(array, "%d", input); printf("%d", value); 识别前导'0'数字的一种方法是记录输入的扫描偏移量 int n1, n2; in
int input;
printf("Enter an number: \n");
scanf(" %d", &input);
char array[10];
int value = sprintf(array, "%d", input);
printf("%d", value);
识别前导
'0'
数字的一种方法是记录输入的扫描偏移量
int n1, n2;
int input;
if (scanf(" %n%d%n", &n1, &input, &n2) == 1) {
char array[40];
int width = n2 - n1;
int text_length = sprintf(array, "%0*d", width, input); // "0" --> Pad with zeros
// "*" --> Min width in argument list
printf("%d <%s>\n", text_length, array);
}
intn1,n2;
int输入;
如果(扫描频率(“%n%d%n”、&n1、&input、&n2)==1){
字符数组[40];
int宽度=n2-n1;
int text_length=sprintf(数组,“%0*d”,宽度,输入);/“0”->用零填充
//“*”-->参数列表中的最小宽度
printf(“%d\n”,文本长度,数组);
}
“
将占用前导空格<代码>%n“将记录扫描文本偏移位置<代码>%n“不影响scanf()
返回值
限制:像
“-123”
和“+123”
这样的输入将报告4。识别前导'0'
数字的方法是记录输入的扫描偏移量
int n1, n2;
int input;
if (scanf(" %n%d%n", &n1, &input, &n2) == 1) {
char array[40];
int width = n2 - n1;
int text_length = sprintf(array, "%0*d", width, input); // "0" --> Pad with zeros
// "*" --> Min width in argument list
printf("%d <%s>\n", text_length, array);
}
intn1,n2;
int输入;
如果(扫描频率(“%n%d%n”、&n1、&input、&n2)==1){
字符数组[40];
int宽度=n2-n1;
int text_length=sprintf(数组,“%0*d”,宽度,输入);/“0”->用零填充
//“*”-->参数列表中的最小宽度
printf(“%d\n”,文本长度,数组);
}
“
将占用前导空格<代码>%n“将记录扫描文本偏移位置<代码>%n“不影响scanf()
返回值
限制:像
“-123”
和“+123”
这样的输入将报告4。sprintf()的手册页上说
sprintf()
,写入字符串str
这里
sprintf()
将int
输入转换为char数组
例如,如果用户输入的input
为整数123
则将其转换为字符数组123
。现在看来
-------------------------
| 1 | 2 | 3 | \0 |
-------------------------
array
--------------
| 1 | \0 |
--------------
array
和sprintf()
返回打印的字符数(不包括
用于结束字符串输出的空字节)。这意味着
int value = sprintf(array, "%d", input); /* if input = 123(integer) */
printf("%s: ,%d: \n", array,value);/* array: 123(string), value: 3 */
当我使用输入“01”运行以下代码时,value的值为1,忽略0input
声明为整数,当用户给出01
时,则scanf()
仅将1
视为前导0
被忽略,并且只有1
被存储到数组中,数组
如下所示
-------------------------
| 1 | 2 | 3 | \0 |
-------------------------
array
--------------
| 1 | \0 |
--------------
array
但是,如果输入“301”时0不在第一个位置,代码将正常工作。如果用户输入301
,则scanf()
将301
存储到input
中,然后sprintf()
将int
转换为字符数组并存储到array
中,如301
所示
-------------------------
| 3 | 0 | 1 | \0 |
-------------------------
array
sprintf()的手册页上写着
sprintf()
,写入字符串str
这里
sprintf()
将int
输入转换为char数组
例如,如果用户输入的input
为整数123
则将其转换为字符数组123
。现在看来
-------------------------
| 1 | 2 | 3 | \0 |
-------------------------
array
--------------
| 1 | \0 |
--------------
array
和sprintf()
返回打印的字符数(不包括
用于结束字符串输出的空字节)。这意味着
int value = sprintf(array, "%d", input); /* if input = 123(integer) */
printf("%s: ,%d: \n", array,value);/* array: 123(string), value: 3 */
当我使用输入“01”运行以下代码时,value的值为1,忽略0input
声明为整数,当用户给出01
时,则scanf()
仅将1
视为前导0
被忽略,并且只有1
被存储到数组中,数组
如下所示
-------------------------
| 1 | 2 | 3 | \0 |
-------------------------
array
--------------
| 1 | \0 |
--------------
array
但是,如果输入“301”时0不在第一个位置,代码将正常工作。如果用户输入301
,则scanf()
将301
存储到input
中,然后sprintf()
将int
转换为字符数组并存储到array
中,如301
所示
-------------------------
| 3 | 0 | 1 | \0 |
-------------------------
array
使用%d
格式说明符将字符串作为数字读取时,任何前导零基本上都会丢失
如果要保留前导零,需要将输入读取为字符串。这样您就可以准确地获得用户输入的内容。如果您还想执行数值运算,则可以使用strtol
获取数值表示
char array[10];
scanf("%s", array);
int input = strtol(array, NULL, 10);
printf("input as number %d, input as string: %s\n", input, array);
使用%d
格式说明符将字符串作为数字读取时,任何前导零基本上都会丢失
如果要保留前导零,需要将输入读取为字符串。这样您就可以准确地获得用户输入的内容。如果您还想执行数值运算,则可以使用strtol
获取数值表示
char array[10];
scanf("%s", array);
int input = strtol(array, NULL, 10);
printf("input as number %d, input as string: %s\n", input, array);
这是一个int,不是字符串。这是意料之中的。scanf()
将01
和1
转换为相同的位模式(一组零位和最后一位)
sprintf()无法判断转换的文本中有多少前导零(如果确实转换了任何文本)。注意,在源代码中,0777
和777
产生非常不同的值;第一个是八进制常数,第二个是十进制常数。使用scanf(“%d”,…)进行十进制输入代码>,前导零被忽略;使用scanf(“%i”,…)
,前导零很重要(它又是八进制)。@Ben被01
转换成一个不同的整数,然后1
?转换为int时,01
的精确值是多少?如果要读取前导零,最好的选择是将数字作为字符串读入,然后将输入保存到字符数组,而不是int。您对数字的整数值不感兴趣