各路IT大佬 , 大神,大侠,劳烦帮小弟看看这个C 语言成绩管理系统 的代码 ,为什么性别输出不了 1C

代码如下 ,直奔主题:

图片说明

  #define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

int judge_Exi();   //根据学号判断该学生信息是否存在
void menu_face_();
void log_score();       //录入学生信息
void modlify_info();    //修改学生信息
void search_info();     //查询学生信息
void search_info_ID();
void search_info_name();
void single_display();   //单个学生信息显示
void browse_info();     //浏览学生信息
void order_info();      //学生成绩排序
void _exit_exe();       //退出系统
typedef struct
{
    char name[10];
    unsigned short age;
  char sex[10];
    char ID[15];
    float major;
    float English;
    float math;
    float PE;
    float sum_score;
    float ave_score;
}student;
student stu[50];


int n = 0;  //班上的总人数
int main()
{
    while (1)
    {
        menu_face_();
    }
    return 0;
}

void log_score()
{
    system("cls");
    int j;
    printf("班上总人数: ");
    scanf("%d", &n);

    for (j = 0; j < n; j++)
    {
        printf("正在录入第%d位学生的信息:\n", j + 1);
        printf("姓名: ");
        scanf("%s", stu[j].name);
        printf("\n");

        printf("学号: ");
        scanf("%s", stu[j].ID);
        printf("\n");

      printf("性别: ");
        scanf("%s", stu[j].sex);
        printf("\n");
        printf("年龄: ");
        scanf("%d", &stu[j].age);
        printf("\n");

        printf("专业: ");
        scanf("%f", &stu[j].major);
        printf("\n");

        printf("高数: ");
        scanf("%f", &stu[j].math);
        printf("\n");

        printf("英语: ");
        scanf("%f", &stu[j].English);
        printf("\n");

        printf("体育: ");
        scanf("%f", &stu[j].PE);
        printf("\n");

        stu[j].sum_score = stu[j].major + stu[j].math + stu[j].English + stu[j].PE;
        stu[j].ave_score = stu[j].sum_score / 4;
        system("cls");

    }
    printf("请按任意键返回主菜单......");
    _getch();

}
void search_info()
{
    int choice;
    printf("可通过以下两种方式查找:\n");
    printf("\n");
    printf("1.学号查找  2.姓名查找\n");
    printf("\n");
    printf("请输入序号(1-2)选择查找方式:");
    scanf("%d", &choice);
    switch (choice)
    {
    case 1:
        search_info_ID();    //学号查找
        break;
    case 2:
        search_info_name();    //姓名查找
        break;
    default:
        printf("没有该选项,请重新输入......");
    }
    printf("请按任意键返回主菜单......");
    _getch();

}

void search_info_ID()
{
    char ID0[15];
    printf("请输入学号: ");
    scanf("%s", ID0);
    int i;
    for (i = 0; i < n; i++)
    {
        if (strcmp(ID0, stu[i].ID))
            continue;
        else
        {
            single_display(stu[i]);
            break;
        }
    }
}

void single_display(student s)
{
    printf("姓名\t学号\t性别\t年龄\t专业\t高数\t英语\t体育\t总分\t平均分\n");
    printf("\n");
    printf("%s %s%s %d  %.1f  %.1f  %.1f  %.1f  %.2f  %.2f\n", s.name, s.ID, s.sex, s.age, s.major, s.math, s.English, s.PE,
        s.sum_score, s.ave_score);
}

求大神解答 , 是printf的用法错误吗 ,不能连续输出3个字符串 ?

c

4个回答

你从那里判断他没有显示性别的?printf("%s %s%s %d 你的这个格式化,学号与性别中间没有分隔符,你怎么看得出来显示没显示?

vector_seek
vector_seek 图上不是有吗
2 年多之前 回复

我觉得不只性别,专业也没显示。
所以是不是因为他们是 汉字的问题?或者输出格式不对

qq_34309305
75闪光雷 你那性别输入为英文可以吗?
2 年多之前 回复
vector_seek
vector_seek 不晓得啊 ,前面两个字符串 姓名和 学号都显示出来了的 ,我把性别换成%d输出可以输出来
2 年多之前 回复

没看太多,但是有一点,再输入字符串的时候,如果前面有输入数字的,最好在字符串钱加一句,getchar()

vector_seek
vector_seek 我前面没有输入数字 ,况且我这也是格式化输出 ,不需要_getch()吧
2 年多之前 回复

楼上正解,缓存区里的回车被下一个%s吃了,可以用getchar()吃掉多余的回车,也可以用fflush(stdin)清空缓存区,你应该把输入数据的图放出来

vector_seek
vector_seek 哦哦 ,有些明白了
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!