C语言问题 结构体

一道学校留的题目
请定义一个描述学生基本信息的结构,包括姓名,学号,籍贯,身份证号,年龄,家庭住址,性别,联系方式等。并定义一个结构体数组。编程:

a) 编写函数 input(), 输入基本信息(3~5 条记录);

b) 编写函数 print(),输出全体记录信息;

c) 编写函数 search(), 检索一个指定的学生信息并返回, 由主函数打印到屏幕上。
【输入形式】学生数量N

N个学生的姓名 学号 籍贯 身份证号 年龄 家庭住址 性别 联系方式

要查找的学生姓名

【输出形式】N个学生的姓名,学号,籍贯,身份证号,年龄,家庭住址,性别,联系方式

以及要查找的学生的姓名,学号,籍贯,身份证号,年龄,家庭住址,性别,联系方式

【样例输入】

3
zhang 19920101 beijing 255141199201015656 25 beijing m 12114145654
li 18850202 liaoning 210212188502020303 14 liaoning w 14156865959
wang 121 tianjin 251242655252 20 tianjin m 12542542
zhang

【样例输出】

zhang,19920101,beijing,255141199201015656,25,beijing,m,12114145654

li,18850202,liaoning,210212188502020303,14,liaoning,w,14156865959

wang,121,tianjin,251242655252,20,tianjin,m,12542542

zhang,19920101,beijing,255141199201015656,25,beijing,m,12114145654

我的代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
    char name[20] ;
    char num[15];
    char id[20];
    int age;
    char address[100];
    char addresss[100];
    char sex;
    char phone[15];
}stu[5];
void input(struct student stu[], int n);
void print(struct student stu[],int n);
void search(struct student stu[], char name[],int n);
int main()
{
    char name[20];
    int n;
    scanf("%d", &n);
    input(stu, n);
    scanf("%s", name);
    print(stu, n);
    search(stu, name, n);
    system("pause");
    return 0;
}
void input(struct student stu[], int n) {
    for (int i = 0; i < n; i++) {
        scanf("%s",stu[i].name);
        scanf("%s", stu[i].num);
        scanf("%s", stu[i].address);
        scanf("%s", stu[i].id);
        scanf("%d", &stu[i].age);
        scanf("%s", stu[i].addresss);
        scanf("%c", &stu[i].sex);
        scanf("%s", stu[i].phone);
    }
}
void print(struct student stu[],int n) {
    for (int i = 0; i < n; i++) {
        printf("%s,%s,%s,%s,%d,%s,%c,%s\n", stu[i].name, stu[i].num, stu[i].address, stu[i].id, stu[i].age, stu[i].addresss, stu[i].sex,stu[i].phone);
    }
}
void search(struct student stu[], char name[],int n) {
    for (int i = 0; i < n; i++) {
        if (strcmp(stu[i].name, name) == 0)
            printf("%s,%s,%s,%s,%d,%s,%c,%s\n", stu[i].name, stu[i].num, stu[i].address, stu[i].id, stu[i].age, stu[i].addresss, stu[i].sex, stu[i].phone);
    }
}

请问是哪里出错了啊 我这个代码输出的不对 初学者谢谢各位!

阅读 3.7k
2 个回答

你应该从输出看出来点端倪吧。有没有发现你打印出来的 sex 是一个空格?说明你输入的也是空格。那问题出在哪里呢?

在 C 中,scanf 的 %s 会忽略前置空白符,遇到空白符终止;而 %c 就是读一个字符,这个字符可以是空白符,你给的输入示例中 zhang 19920101 beijing 255141199201015656 25 beijing m 12114145654,%s 读完第二个 beijing 之后,%c 读的不是 m 而是 beijing 后面的空格。

解决方法就是:输入示例既然是一行一行的,那你就一行一行地读吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进