c itoa函数的递归实现 及static小插曲

测试对静态变量声明及定义疑问同时,给出itoa函数(把整数转换为字符串)的实现。

#include<stdio.h>
#include<math.h>
#define MAXSIZE 100
char s[MAXSIZE];
void itoa1(int n, char s[])//该程序仅供测试静态声明,无法将负数正确转换 
{
	//起初思想:若为负数,则初次声明后,之后的声明定义语句可能直接跳过,就能实现对负数的转换。 
	if(n < 0)
	{
		n = -n;
		s[0] = '-';
		static int i = 1; // #1 c不允许重复声明定义,但可以在条件语句中加入,且初次声明定义后之后的声明语句当作赋值语句运行。 
	}
	if(n/10 > 0)
		itoa1(n / 10, s);
	static int i = 0;	// #2 n为负数时,该语句当作:i = 0;而非经初次声明定义后直接跳过。 
	s[i++] = n % 10 + '0';
	s[i] = '\0';
}

void itoa2(int n, char s[])//能转换,但不能处理最大负数的情况。 
{
	static int i = 0;
	if(n < 0)
	{
		n = -n;
		s[i++] = '-';
	}
	if(n/10 > 0)
		itoa2(n / 10, s);
	s[i++] = n % 10 + '0';
	s[i] = '\0';
}

void itoa3(int n, char s[])//nb 
{
	static int i;
	
	if(n / 10)
		itoa3(n / 10, s);
	else
	{
		i = 0;
		if(n < 0)
			s[i++] = '-';
	}
	s[i++] = abs(n % 10) + '0';
	s[i] = '\0';
}

int main()
{
	int num = -2147483648;
	itoa3(num, s);
	printf("%s", s, s[10]);
	return 0;
 } 

参考书目《the c program language》

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页