printf(),sprintf(),fprintf(),scanf(),sscanf(),fscanf()

1.输出数据

  • printf():向屏幕输出数据
  • sprintf():向字符串输出数据,把输出的数据保存到字符串
  • fprintf():输出数据到文件

举例:

int main() {
	char str[20];
	FILE* fp = fopen("D:\\a.txt", "w");
	assert(fp != NULL);
	//printf("%.3lf", 12.345);

	sprintf(str, "%.3lf",12.345);//把12.345变成字符串“12.345”保存到str中
	printf("%s", str);

	fprintf(fp,"%s",str);
	fclose(fp);
    return 0;
}

把整型数值转为十六进制字符串(利用sprintf()函数):

int main() {
	int a = 123456789;
	//把a转为十六进制字符串
	char str2[20];
	//printf("%x\n", a);
	sprintf(str2, "%x,%X", a,a);
	printf("%s\n",str2);

	return 0;
}

%x,%X:x大小写对应转化为十六进制后的字母大小写。

利用sprintf实现字符串相加:

int main() {
	const char* str1 = "hello ";
	const char* str2 = "world";
	char str3[30];
	sprintf(str3, "%s%s", str1, str2);
	printf("%s", str3);
	return 0;
}

2.读取数据

  • scanf():从命令行上读取数据
  • sscanf():从字符串中读取数据
  • fscanf():从文件中读取数据

scanf()举例

int main()
{
	char  tokenstring[] = "15 12 14...";
	char  s[81];
	char  c;
	int   i;
	float fp;

	sscanf(tokenstring, "%80s", s); 
	sscanf(tokenstring, "%c", &c);  
	sscanf(tokenstring, "%d", &i);  
	sscanf(tokenstring, "%f", &fp);

	printf("String    = %s\n", s);
	printf("Character = %c\n", c);
	printf("Integer:  = %d\n", i);
	printf("Real:     = %f\n", fp);
}

fscanf()举例

int main()
{
	FILE* fp = fopen("D:\\a.txt", "r");
	while (!feof(fp)) {
		char buffer[100] = { 0 };

		fscanf(fp, "%s", buffer);
		printf("%s\n", buffer);
	}

	// 关闭文件
	fclose(fp);
	return 0;
}

编程题:如何判断合法的IP地址?尽可能考虑各种情况

例:192.168.0.1(由3个点号分隔4个数字,每个数字在0-255之间)

bool IP(const char* str) {
	int arr[5] = { 0 };
	int len=sscanf(str,"%d.%d.%d.%d.%d", &arr[0], &arr[1], &arr[2], &arr[3],&arr[4]);//从字符串str中提取数字到数组
	if (len != 4)
		return 0;
	for (int i = 0; i < 4; i++) {
		if (arr[i] < 0 || arr[i]>255)
			return false;
		if (arr[0] ==0)
			return false;
	}
		
	return true;
}

int main() {
	const char* ip = "192.168.0.1";
	if (IP(ip))
		printf("合理");
	else
		printf("不合理");
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值