你永远叫不醒一个装睡的人题目求助
有这么一道题目:你永远叫不醒一个装睡的人 —— 但是通过分析一个人的呼吸频率和脉搏,你可以发现谁在装睡!医生告诉我们,正常人睡眠时的呼吸频率是每分钟15-20次,脉搏是每分钟50-70次。下面给定一系列人的呼吸频率与脉搏,请你找出他们中间有可能在装睡的人,即至少一项指标不在正常范围内的人。
输入格式:
输入在第一行给出一个正整数N(≤10)。随后N行,每行给出一个人的名字(仅由英文字母组成的、长度不超过3个字符的串)、其呼吸频率和脉搏(均为不超过100的正整数)。
输出格式:
按照输入顺序检查每个人,如果其至少一项指标不在正常范围内,则输出其名字,每个名字占一行。
输入样例:
4
Amy 15 70
Tom 14 60
Joe 18 50
Zoe 21 71
输出样例:
Tom
Zoe
我写的代码如下:
#include <stdio.h>
int main()
{
int num;
int i;
char name;
char *bad;
int maibo;
int heart;
int a = 0;
scanf("%d",&num);
for (i=0;i<num;i++)
{
scanf("%s%d%d",name,&maibo,&heart);
//呼吸频率是每分钟15-20次,脉搏是每分钟50-70次
if (maibo > 20 || maibo < 15 || heart > 70 || heart < 50)
{
//非正常数据
//printf("%s\n",name);
bad = name;
a ++;
}
}
for (int m=0;m<a;m++)
{
printf("%s\n",bad);
}
return 0;
}
实际执行的时候,如果输入2行都是错误的数据,最后输出的bad数组只有最后一行错误数据,不知道是哪里问题? 本帖最后由 xieglt 于 2020-9-21 15:59 编辑
这句有问题
bad = name;
可以写成
bad = (char *)mallic(10);
strcpy(bad,name);
或者
bad = (char *)mallic(10);
sprintf(bad,"%s",name);
记得包含头文件
#include <string.h>
#include<stdlib.h>
最后要记得 free xieglt 发表于 2020-9-21 15:53
这句有问题
bad = name;
可以写成
代码运行是可以了,但不明白原理,我那种写法是什么问题 本帖最后由 行客 于 2020-9-21 16:26 编辑
dysow 发表于 2020-9-21 16:13
代码运行是可以了,但不明白原理,我那种写法是什么问题
char *bad;
bad是指针数组,但每一个指针并没有分配指向内存。xieglt给的回复是对内存做了分配。 dysow 发表于 2020-9-21 16:13
代码运行是可以了,但不明白原理,我那种写法是什么问题
char * bad ;定义了一个10个元素的char * 数组,
每个元素的值未初始化。
scanf("%s%d%d",name,&maibo,&heart);
输入后,name的内容是发生变化的,
而
bad = name ;只是让bad 指向了name,而不是把name的内容复制到bad里面,
所以,最后,每一个被赋值的bad都指向了name,而name只保存了最后一个输入的内容。
所以输出全是最后输入的那个name.
我的写法是给bad分配一段内存,然后把name复制到bad里,因此,name的内容得到
了保存。 行客 发表于 2020-9-21 16:20
char *bad;
bad是指针数组,但每一个指针并没有分配指向内存。xieglt给的回复是对内存做了分配。
如果不想动态分配内存 malloc
可以这样定义 bad
char bad; xieglt 发表于 2020-9-21 16:26
如果不想动态分配内存 malloc
可以这样定义 bad
char bad;
是的,直接定义一个二维数组,直接在栈里做操作 xieglt 发表于 2020-9-21 16:22
char * bad ;定义了一个10个元素的char * 数组,
每个元素的值未初始化。
scanf("%s%d%d",name,& ...
那就是说我之前那个写法相当于每次都把name的地址给覆盖了,所以留下的就只有最后一个name地址了
页:
[1]