P1957口算练习题 (用sscanf以及sprintf)

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
	int n;
	int i,j;
	char s[100],b;//s存放最终的字符串,方便用strlen计算长度
	//a存放临时字符串
	char a[10];
int c=0,d=0;
	cin>>n;         //输入次数 
	for(i=0;i<n;i++)
	{
		cin>>a;     //输入第一个字符,下面的if判断是字符还是数字
		           //如果是字符就要把字符存入另一个数组里,因为临时字符串随时都会更新数据
				   //字符存入另一个数组,方便后面判断进行什么样的计算 
		if(a[0]>='a'&&a[0]<='z')
		{
			b=a[0];
		//	cout<<b<<endl;
			cin>>c>>d;
		}
		else
		{
			sscanf(a,"%d",&c);  //如果输入的不是字母,就要通过sscanf函数转换为int型 
			cin>>d;
		}
		memset(s,0,sizeof(s));  //初始化数组 
		if(b=='a')
		{
			sprintf(s,"%d+%d=%d",c,d,c+d);  //需要注意的是sprintf函数不是一个输出的函数
			                            //它只是将数据转换形式存入一个字符串中 
		}else if(b=='b')
		{
			sprintf(s,"%d-%d=%d",c,d,c-d);
		}else if(b=='c')
		{
			sprintf(s,"%d*%d=%d",c,d,c*d);
		}
		cout<<s<<endl<<strlen(s)<<endl;
	}
	return 0;
}

 知识点概要:

具体内容详见链接:(9条消息) C 字符串函数 sprintf()、snprintf() 详解_love、reading的博客-CSDN博客_sprintf取一个字符串几个字符d

 sprintf函数的打印位置不是命令框,而是函数里所指向的字符串中,例如上述代码里的

sprintf(s,"%d+%d=%d",c,d,c+d); 

它执行的操作就是将int型变量c,d以及c+d等数字以char型写入字符串s,这里值得注意的是第一个参数只能是char型的数组,具体原因我还不明白,可能是因为这是c中的函数,所以用string型是不可以的。


 sscanf函数也可以和scanf对比着理解,例如scanf是直接从键盘读取数据,而sscanf是从字符串读取数据,它和sprintf的出发点是一样的。例如上述代码中的一句:

sscanf(a,"%d",&c); 

它执行的操作是将char型字符串a中的a[0]以”%d“(int型)读入c中  (请结合源代码分析,a是定义的临时数组a[10],c是定义的需要处理的int型变量)

需要注意的是,这里的a也需要是char型数组。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值