自编scanf函数

<pre name="code" class="html">#include "stdafx.h"
#include <stdio.h>
#include "ZRScanf.h"


int Atoi(char *pStr)
{
  int Res = 0;
   
  if( NULL != pStr)
  {
     
     if(  pStr[0] != '-')
	 {
	    for(int nCount = 0; '\0' != pStr[nCount]; nCount++)
		{
		    if( pStr[nCount] < '0' || pStr[nCount] > '9')
			{
			    return 0;
			}		
		}
	 
       for(int i = nCount-1, k =1; i >= 0; i--)
	   {
	     Res = Res + (pStr[i] - '0')*k;
		 k*=10;
	   }
	 
	   return Res;
	 }
    else
	{
		for(int nCount = 1; '\0' != pStr[nCount]; nCount++)
		{
		   if( pStr[nCount] < '0' || pStr[nCount] > '9')
		   {
		     return 0;
		   }		
		}
	   
		for(int i = nCount -1, k = 1; i > 0; i--)
		{
		   Res = Res + (pStr[i] - '0')*k;
		   k*=10;
		}
	
	   return -Res;	
	}
  }
  return Res;
}

void Scanf(const char* pFormate,...)
{
    char *pTemp = (char*)&pFormate;
 	pTemp += 4;
   
	if( NULL != pFormate)
	{
	  while(*pFormate)
	  {
	    if( '%' != *pFormate)
		{
		  putchar(*pFormate);
		  pFormate++;
		}
	   if( '%' == *pFormate)
	   {
	      pFormate++;
		  switch(*pFormate)
		  {
		  case 'c':
		  case 'C':
			  {
			     *(*(char**)pTemp) = getchar();
                  char c = '0';
				  while( (c = getchar()) != EOF)
				  {
				     if( c == ' ' || c == '\n')
					 {
				        break;
					 }
				  }
				 pFormate++;
				 pTemp+=4; 
			  }
			  break;
		  case 's':
		  case 'S':
			  {
			      char *pChar = *(char**)pTemp;
				  for(int i = 0;  ;i++)
				  {
				     pChar[i] = getchar();
					 if( ' ' == pChar[i] || '\n' == pChar[i])
					 {
					   break;
					 }
				  }	
				  pChar[i] = '\0';
				  pFormate++;
				  pTemp+=4;
			  }
			  break;
		  case 'd':
		  case 'D':
			  {
			     char szBuf[256] = "";
				 for(int i =0; ; i++)
				 {
				   szBuf[i] = getchar();
				   if( ' ' == szBuf[i] || '\n' == szBuf[i])
				   {
				     break;
				   }
				 }
			     szBuf[i] = '\0';                
				 *(*(int**)pTemp) = Atoi(szBuf);
				 pFormate++;
				 pTemp+=4;				 
			  }
			  break;
		  }
	   }	
	  }
	}
}




                
### 国民生产总值年增长率计算 假设我们需要编写一个C语言程序来计算未来某一年的国民生产总值(GDP)相对于当前值的增长比例,并通过用户输入年增长率来进行动态计算。我们可以按照以下步骤完成: #### 计算公式 给定年增长率为 \( r \),年数为 \( n \),则未来的总倍数 \( p \) 可以表示为: \[ p = (1 + r)^n \] 其中,\( p \) 表示经过 \( n \) 年后的 GDP 总量相对于现在的倍数。 #### 编程实现 我们将使用 `scanf` 来接收用户的输入作为年增长率 \( r \),并让用户可以自由设定时间周期(这里设为固定10年)。下面是具体的 C 代码实现及解释。 ```c #include <stdio.h> #include <math.h> int main() { double rate; // 定义变量存储年增长率 int years = 10; // 设定时间为10年 double multiplier; // 提供提示信息,告知需要输入的数据内容 printf("请输入每年的经济增长率(例如:7%% 输入0.07): "); // 使用 scanf 接收用户输入 if(scanf("%lf", &rate) != 1){ fprintf(stderr,"错误:无效输入。\n"); return -1; } // 根据提供的利率和年限计算总的增值系数 multiplier = pow((1 + rate), years); // 输出最终的结果以及其含义 printf("按此速度发展,在%d年后,我国国民生产总值将是原来的 %.2f 倍\n", years, multiplier); // 额外显示百分比形式的成长幅度 printf("(即增加了约 %d %%)\n", (int)((multiplier * 100)-100)); return 0; } ``` **注意**: 在上述例子中,我们直接将百分制转换为了小数值(比如7% -> 0.07),以便于后续运算处理更简单明了。同时在最后也对结果进行了格式化输出,使其易于理解。 #### 分析运行结果 当你依次输入7%,8%,10%时,该程序会返回相应的预期GDP成长情况。由于采用了浮点数运算,所以实际得到的小数位可能会稍有差异;但是总体上能准确反映出大致的变化趋势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值