C语⾔把字符串转换为数字
C当中有⼀些函数专门⽤于把字符串形式转换成数值形式。
printf()函数和sprintf()函数 -->通过转换说明吧数字从数字形式转换为字符串形式;
scanf()函数把输⼊字符串转换为数值形式;
应⽤场景:
编写程序需要使⽤数值命令形参,但是命令形参被读取为字符串。要使⽤数值必须先把字符串转换为数字。
atoi()函数:
int atoi(char *str);
1 #include <stdio.h>
2 #include <stdlib.h>
3
4int main(void)
5 {
6int i,times;
7
8if(argc < 2 || times = atoi(argv[1])<1)
9 printf("Usage:%s positive-number\n",argv[0]);
10else
11for(i=0;i<times;i++)
12 puts("Hello,good looking!");c语言定义一个字符串
13
14return0;
15 }
程序运⾏⽰例:
$ hello 3
Hello, good looking!
Hello, good looking!
Hello, good looking!
作⽤就是根据参数,选择打印⼏次Hello, good looking!
如果参数开头是⾮数字字符,则atoi函数返回值是0;因为这种⾏为是未定义的。因此需要有错误检测功能的strtol()函数会更安全。
stdlib.h头⽂件:不仅包含atoi()函数,还包含了atof()函数、atol()函数;
atof()函数把字符串转换成double类型的值;
atol()函数把字符串转换成long类型的值;
++++++++++++++++++++++++++++++++++++++++++++++++++++++
strtol函数原型:long strtol(const char * restrict nptr,char ** restrict endptr, int base);
1 #include <stdio.h>
2 #include <stdlib.h>
3#define LIM 30
4char * s_gets(char * st, int n);
5
6
7int main(void)
8 {
9char number[LIM];
10char * end;
11long value;
12
13 puts("Enter a number (empty line to quit);");
14while(s_gets(number,LIM)&& number[0] !='\0')
15 {
16 value =strtol(number,&end,10);
17 printf("base 10 input,base 10 output:%ld,stopped at %s (%d)\n",value,end, *end);
18 value = strtol(number, &end, 16);
19 printf("base 16 input,base 10 output:%ld,stopped at %s (%d)\n",value,end, *end);
20 puts("Next number:");
21 }
22 puts("Bye!\n");
23return0;
24 }
25
26char * s_gets(char * st, int n)
27 {
28char * ret_val;
29int i=0;
30
31 ret_val = fgets(st, n, stdin); //读取成功,返回⼀个指针,指向输⼊字符串的⾸字符;32if(ret_val)
33 {
34while(st[i]!='\n' && st[i]!='\0')
35 i++;
36if(st[i] =='\n') //fgets会把换⾏符也吃进来了,fgets会在末尾⾃动加上\0;
37 st[i]='\0';
38else//其实是'\0'
39while(getchar() != '\n') //会把缓冲区后续的字符都清空
40continue;
41 }
42return ret_val;
43 }
程序运⾏:
Enter a number (empty line to quit);
10
base 10 input,base 10 output:10,stopped at (0)
base 16 input,base 10 output:16,stopped at (0)
Next number:
10atom
base 10 input,base 10 output:10,stopped at atom (97) base 16 input,base 10 output:266,stopped at tom (116) Next number:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论