“白富美”问题背后的C语言知识

“白富美”问题描述

“白富美”其实很简单,就是三组printf()和scanf()组成的输入输出,以及if判断,最终输出的是“你是白富美!”或者“你不是白富美!”

一、错误方法

1.错误代码
1 #include<stdio.h>
2 #include<string.h>
3 int main()
4 {
5	int money = 0;
6	char *color = NULL, *beautiful = NULL; 
7	printf("你白吗?");
8	scanf("%s",color);
9	printf("请输入你的财产总额:");
10	scanf("%d",&money);
11	printf("你美吗?");
12	scanf("%s",beautiful);
13	if(strcmp(color,"白") == 0 && money > 100 && strcmp(beautiful,"美") ==0)
14		printf("\n你是白富美!");
15	else 
16		printf("\n你不是白富美!");
17	return 0;
18 }

错误运算结果:
在这里插入图片描述

2.错误原因

上面这段代码的问题,主要在于没有给定义的指针变量分配内存空间,导致scanf()函数无法完成输入操作。虽然在定义指针变量时给指针变量赋值NULL,但实际上NULL表示0,是个空地址。所以,scanf()函数检测到空地址后,就停止执行其输入操作了。

二、正确方法

发现了问题后,我用python和C两种语言写了代码,不得不说,python的代码是真的简单,而且不需要考虑一些底层的问题。

1.python代码
  1 color = input("你白吗?")
  2 money =int(input("请输入你的财产总额:"))
  3 beautiful = input("你美吗?")
  4 print()
  5 if color == "白" and money > 1000 and beautiful == "美":
  6  print("你是白富美!")
  7 else:
  8  print("你不是白富美!")

python运算结果:

你白吗?白
请输入你的财产总额:1001
你美吗?美

你是白富美!
2.C代码
1 #include<stdio.h>
2 #include<string.h>
3 int main()
4 {
5	int money = 0;
6	char color[100], beautiful[100];
7	printf("你白吗?");
8	scanf("%s",color); 
9	printf("请输入你的财产总额:");
10	scanf("%d",&money);
11	printf("你美吗?");
12	scanf(" %s",beautiful);
13	if(strcmp(color,"白") == 0 && money > 100 && strcmp(beautiful,"美") ==0)
14		printf("\n你是白富美!");
15	else 
16		printf("\n你不是白富美!");
17	return 0;
18 }
3.C代码
1 #include<stdio.h>
2 #include<string.h>
3 #include<malloc.h>
4 int main()
5 {
6	int money = 0;
7	char *color, *beautiful;
8	color = (char *)malloc(sizeof(char));
9	beautiful = (char *)malloc(sizeof(char)); 
10	printf("你白吗?");
11	scanf("%s",color); 
12	printf("请输入你的财产总额:");
13	scanf("%d",&money); 
14	printf("你美吗?");
15	scanf(" %s",beautiful);
16	if(strcmp(color,"白") == 0 && money > 100 && strcmp(beautiful,"美") ==0)
17		printf("\n你是白富美!");
18	else 
19		printf("\n你不是白富美!");
20	return 0;
21 }

运算结果:

你白吗?白
请输入你的财产总额:102
你美吗?美

你是白富美!

三、总结

1.由于我的能力有限,所在在使用C语言的指针时出错,导致整个程序无法正确运行。
2.在使用scanf()函数时,一定要注意规范。
3.比如输入语句:scanf("%s %c %d", str,&c,&a);,正确的输入方式是:我来了! r 10,即两两之间用空格隔开,因为 scanf()语句里面两两之间就是用空格隔开的,当然也可以换成逗号隔开,对应的输入时也要用逗号隔开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值