atoi函数
c语言中,atoi函数将字符串转变为数字,若遇到字母,就会停止输出
#include <stdio.h>
#define Max_size 1024
#include <string.h>
void atoi(char *a)
{
int temp = 0;
int i = 0;
int flag = 1;
if(a[i] == '-')
{
flag = -1;
}
while(a[i] != 0)
{
if(a[i] > '0' && a[i] < '9')
{
temp = a[i] - '0' + temp * 10;
i++;
}
else
break;
}
printf("%d\n" , temp * flag);
}
int main()
{
char a[Max_size];
printf("请输入字符串\n");
scanf("%s" , a);
atoi(a);
return 0;
}
这个程序完成了从字符串变为数字的功能
思想算法:
首先要得到一串字符串,所以要创建一个字符数组用来存放。然后依次将这个数组里的字符遍历得到,通过一些方法,将得到的那些数转化为十进制。
tips:
1、要输入一串字符串,就要通过字符数组来存放
2、字符数组里的0相当于’\0’
3、在定义数组的时候,可以运用宏定义去实现给他分配多少空间
4、在atoi函数中,形参为字符数组,则要加上*,即取数组首地址
5、一串字符串也很有可能是负的,所有要先定义他的一个标志位flag,然后判断他的首位是否为负,为负的话就令flag为-1,然后在最后的结果的基础上乘以flag。
6、在字符数组没有读到空之前,都要一直向后读数,因为不知道有多少次,所以用while,判断条件为a【i】是否等于0(参见tip2),比用strlen方便的多
7、也可以不用数组i来进行判断,用*加数组名,来代表首地址,并读出里面的内容。然后数组名++就代表依次向后移位。例如
if(*a == '-')
{
flag = -1;
a++;
}
while(*a != 0)
{
a++;
}
8、atoi这个函数默认的输入数字才有效,输入字母自动退出,而输出前面的数。所以要对字符数组的内容进行判断是否是数字
9、得到数字之后,要将他转化为十进制。因为他是先得到的高位数,所以可以让她连着低位数一起乘10,有多少位乘以多少10
问:什么叫格式化输出与输入
答:在输出与输入时,会有格式的限定。如果不按照程序里规定的格式输入,则会出现未知数。
#include <stdio.h>
int main()
{
int i;
printf("请输入一个整数\n");
scanf("sm = %d" , &i);
printf("%d\n" , i);
return 0;
}
这个程序在输入的时候就应该输入 sm = 3,必须按照他给你的格式进行输入,否则就会出现未知数,而程序也会乖乖的按照既定的格式进行输出。
#include <stdio.h>
int main()
{
int i;
int num;
int c_num;
float f_num;
double d_num;
int a[3];
char src[3];
printf("请输入整型数\n");
scanf("%d" , &num);
printf("num = %d\n" , num);
getchar();
printf<