新手求助
问题是装睡问题,寒假没打代码,现在忘了,出了问题不知道怎么回事7-3 装睡 (10 分)
你永远叫不醒一个装睡的人 —— 但是通过分析一个人的呼吸频率和脉搏,你可以发现谁在装睡!医生告诉我们,正常人睡眠时的呼吸频率是每分钟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 h,m,i,n;
char name;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s %d %d",&name,&h,&m);
if(h<15||h>20||m<50||m>70)
printf("%s",name);
}
return 0;
}
上面一份是我打的横线部分是问题所在,我不知道给char数组赋值还需要&吗,因为下面这个
#include<cstdio>
using namespace std;
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
char name;
int b,p;
scanf("%s %d %d",name,&b,&p);
if(b<15||b>20||p<50||p>70)
printf("%s\n",name);
}
return 0;
}
他的横线部分甚至没有下标,到底该怎么用啊。
#include<stdio.h>
int main()
{
int h,m,i,n;
char name;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s %d %d",&name,&h,&m);
if(h<15||h>20||m<50||m>70)
printf("%s",name);
}
return 0;
}
上面的代码我的被吞了,还有就是最后printf里面如果我的name不加&就没办法运行完整是为什么 本帖最后由 jackz007 于 2019-3-2 11:26 编辑
name[] 的用法有误,已经修改,楼主可以参考下面的代码:
#include <stdio.h>
int main()
{
int h , m , i , n ;
char name ;
scanf("%d" , & n) ;
for(i = 0 ; i < n ; i ++) {
scanf("%s %d %d" ,name , & h , & m) ; // name 本身就是 & name
if(h < 15 || h > 20 || m < 50 || m > 70) printf("%s\n" , name) ;
}
}
jackz007 发表于 2019-3-2 11:24
name[] 的用法有误,已经修改,楼主可以参考下面的代码:
您好,首先谢谢您的回复,我还有一点问题就是char数组的话每次都是name位置,不是每个位置只能存放一个字符吗 jackz007 发表于 2019-3-2 11:24
name[] 的用法有误,已经修改,楼主可以参考下面的代码:
大佬,我还有一个问题就是printf中
if(h < 15 || h > 20 || m < 50 || m > 70) printf("%s\n" , name) ;
那这里面的name相当于&name应该指向的是哪里啊,不应该直接用name的吗 你的理解没错,name[] 确实是每个位置只能容纳 1 个字符,但是,scanf("%s" , name) 是从键盘连续读取由多个字符构成的一个字符串,直到遇到回车才能结束,name 就是用于存放这个字符串的内存地址。 jackz007 发表于 2019-3-2 11:46
你的理解没错,name[] 确实是每个位置只能容纳 1 个字符,但是,scanf("%s" , name) 是从键盘连续读 ...
好的好的,谢谢您,我听懂了。 本帖最后由 jackz007 于 2019-3-2 11:54 编辑
11TEN 发表于 2019-3-2 11:46
大佬,我还有一个问题就是printf中
if(h < 15 || h > 20 || m < 50 || m > 70) printf("%s\n" , name) ...
name 是一个地址,name 只是字符串 name 中的第一个字符,二者性质不一样。
printf("%s\n" , name)
要求的是字符串地址,不是一个字符,如果逐个输出字符应该这样写代码:
i = 0 ;
while(name) printf("%c" , name) ;
printf("\n")
页:
[1]