洛谷P1957 口算练习题 题解(c语言)

这题的关键是要认识两个函数sscanf和sprintf都是操作字符串的

sscanf可以把一个字符串的内容转换成别的类型存储在哪个类型的变量里

sscanf(a,b,c)有三个参数(也可理解两个变量),第一个参数是放要被转换的字符串,第二个参数放要转换的类型如int double,第三个是要存放的变量,后面两个的输入格式和正常用scanf一样

sprintf是把一个(格式)字符串存入

sprintf(a,b,c)(也可理解两个变量)也有三个参数,第一个放要存储的地方,第二个和第三个("%d*%d=%d", c, d, c * d)和printf格式差不多,就好像printf是打印到屏幕上sprintf是打印到要储存的地方。

代码如下:

#define  _CRT_SECURE_NO_WARNINGS 1
#include 
#include 
#include 
#include 

int main() {
	char a;
	char b[10], s[1000];
	int n, c, d;
	scanf("%d", &n);
	//scanf("%s", b);
	
	for (int i = 0; i < n; i++) {
		scanf("%s", b);
		if (b[0] <= 'c' && b[0] >= 'a') {
			a = b[0];
			scanf("%d %d", &c, &d);
		}
		else {
			sscanf(b, "%d", &c);
			scanf("%d", &d);
		}

		memset(s, '\0', sizeof(s));
		if (a == 'a') {
			sprintf(s, "%d+%d=%d", c, d, c + d);
		}
		else if (a == 'b') {
			sprintf(s, "%d-%d=%d", c, d, c - d);
		}
		else if (a == 'c') {
			sprintf(s, "%d*%d=%d", c, d, c * d);
		}
		printf("%s\n", s);
		printf("%d\n", strlen(s));
	}
	return 0;
}

你可能感兴趣的:(c语言,开发语言)