C语言把字符串转换为数字
C当中有一些函数专门用于把字符串形式转换成数值形式。
printf()函数和sprintf()函数 -->通过转换说明吧数字从数字形式转换为字符串形式;
scanf()函数把输入字符串转换为数值形式;
应用场景:
编写程序需要使用数值命令形参,但是命令形参被读取为字符串。要使用数值必须先把字符串转换为数字。
atoi()函数:
int atoi(char *str);
#include <stdio.h>
#include <stdlib.h> int main(void)
{
int i,times; if(argc < || times = atoi(argv[])<)
printf("Usage:%s positive-number\n",argv[]);
else
for(i=;i<times;i++)
puts("Hello,good looking!"); return ;
}
程序运行示例:
$ 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);
#include <stdio.h>
#include <stdlib.h>
#define LIM 30
char * s_gets(char * st, int n); int main(void)
{
char number[LIM];
char * end;
long value; puts("Enter a number (empty line to quit);");
while(s_gets(number,LIM)&& number[] !='\0')
{
value =strtol(number,&end,);
printf("base 10 input,base 10 output:%ld,stopped at %s (%d)\n",value,end, *end);
value = strtol(number, &end, );
printf("base 16 input,base 10 output:%ld,stopped at %s (%d)\n",value,end, *end);
puts("Next number:");
}
puts("Bye!\n");
return ;
} char * s_gets(char * st, int n)
{
char * ret_val;
int i=; ret_val = fgets(st, n, stdin); //读取成功,返回一个指针,指向输入字符串的首字符;
if(ret_val)
{
while(st[i]!='\n' && st[i]!='\0')
i++;
if(st[i] =='\n') //fgets会把换行符也吃进来了,fgets会在末尾自动加上\0;
st[i]='\0';
else //其实是'\0'
while(getchar() != '\n') //会把缓冲区后续的字符都清空
continue;
}
return ret_val;
}
程序运行:
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:
最新文章
- 【IDEA 2016】intellij idea tomcat jsp 热部署
- C#设计模式-原型模式
- Caring for our seniors
- [UCSD白板题] Number of Inversions
- maximum subarray problem
- [MS bug]安装SQL Server 2008 错误:is not a valid login or you do not have permission
- fancybox 关闭弹出窗口 parent.$.fancybox.close(); 无反应 fancybox 关闭弹出窗口父页面自动刷新,弹出子窗口前后事件
- shell复习笔记----用户管理
- Android自己定义控件之应用程序首页轮播图
- 重拾C++ 基础知识总结(二)
- git 如何让单个文件回退到指定的版本
- 我的TDD实践---SVN架设篇
- Dynamics CRM 2015Online Update1 new feature之 通过业务规则清空字段的值
- python3-列表字典简单练习题
- 在一般类中通过XmlWebApplicationContext对象获取应用部署上下文Context
- js 自定义类Android吐司提示框
- mac virtualbox 安装
- java并发里的一些基础概念
- 【转载】sql注入之入门
- C# 获得当前 进程 或 线程的ID