一道学校留的题目
请定义一个描述学生基本信息的结构,包括姓名,学号,籍贯,身份证号,年龄,家庭住址,性别,联系方式等。并定义一个结构体数组。编程:
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);
}
}
请问是哪里出错了啊 我这个代码输出的不对 初学者谢谢各位!
你应该从输出看出来点端倪吧。有没有发现你打印出来的 sex 是一个空格?说明你输入的也是空格。那问题出在哪里呢?
在 C 中,scanf 的 %s 会忽略前置空白符,遇到空白符终止;而 %c 就是读一个字符,这个字符可以是空白符,你给的输入示例中
zhang 19920101 beijing 255141199201015656 25 beijing m 12114145654
,%s 读完第二个 beijing 之后,%c 读的不是 m 而是 beijing 后面的空格。解决方法就是:输入示例既然是一行一行的,那你就一行一行地读吧