#include <stdio.h> #include <string.h> int main() { int N = 0; scanf("%d", &N); char name[6]; char birth[11]; char old_name[6], young_name[6];//最年长人的姓名 最年轻人的姓名 char old_birth1[11] = "1814/09/06", young_birth1[11] = "2014/09/06";//标准 char old_birth2[11] = "1814/09/06", young_birth2[11] = "2014/09/06"; int count = 0;//有效生日的个数 while(N) { scanf("%s %s", name, birth); if(strcmp(old_birth1, birth) <= 0 && strcmp(young_birth1, birth) >= 0) { count++; if (strcmp(old_birth2, birth) > 0) { strcpy(old_name, name); strcpy(old_birth2, birth); } if (strcmp(young_birth2, birth) < 0) { strcpy(young_name, name); strcpy(young_birth2, birth); } } N--; } //printf("%d %s %s\n", count, old_name, young_name); printf("%d", count); if (count > 0) { printf(" %s %s\n", old_name, young_name); } return 0; }帮我看一下这段代码哪里有错
时间: 2023-11-28 08:49:53 浏览: 43
这段代码的逻辑是读入N个人的姓名和生日,然后统计其中生日在1814年9月6日到2014年9月6日之间的人数,并输出其中最年长和最年轻的人的姓名。
代码看起来没有什么错误,但是有几个需要注意的地方:
1. 在定义字符数组时需要为其预留一个空间用于存储字符串末尾的'\0'。
2. 在比较字符串大小时,需要使用strcmp函数,不能直接使用运算符。
3. 在复制字符串时,需要使用strcpy函数,不能直接使用赋值运算符。
以下是修正后的代码:
```
#include <stdio.h>
#include <string.h>
int main()
{
int N = 0;
scanf("%d", &N);
char name[7]; // 预留一个空间存放'\0'
char birth[12]; // 预留一个空间存放'\0'
char old_name[7], young_name[7]; // 预留一个空间存放'\0'
char old_birth1[12] = "1814/09/06", young_birth1[12] = "2014/09/06"; // 预留一个空间存放'\0'
char old_birth2[12] = "1814/09/06", young_birth2[12] = "2014/09/06";
int count = 0;
while(N)
{
scanf("%s %s", name, birth);
if(strcmp(old_birth1, birth) <= 0 && strcmp(young_birth1, birth) >= 0)
{
count++;
if (strcmp(old_birth2, birth) > 0)
{
strcpy(old_name, name);
strcpy(old_birth2, birth);
}
if (strcmp(young_birth2, birth) < 0)
{
strcpy(young_name, name);
strcpy(young_birth2, birth);
}
}
N--;
}
printf("%d", count);
if (count > 0)
{
printf(" %s %s\n", old_name, young_name);
}
return 0;
}
```
阅读全文