a13766971255 发表于 2022-10-10 12:07:23

录入学生成绩

#include<stdio.h>
int main()
{
        int num,grade,math,chin,eng;
        char name,gen,year,school1,school2,zhuanye;
        printf("===============录入学生成绩===============\n");
        printf("学号:\n");
        scanf("%d",&num);
        printf("姓名:\n");
        scanf("%s",&name);
        printf("性别:\n");
        scanf("%s",&gen);
        printf("出生日期(2000-10-8):\n");
        scanf("%s",&year);
        printf("学院:\n");
        scanf("%s",&school1);
        printf("系名:\n");
        scanf("%s",&school2);
        printf("专业:\n");
        scanf("%s",&zhuanye);
        printf("年级:\n");
        scanf("%d",&grade);
        printf("数学成绩:\n");
        scanf("%d",&math);
        printf("语文成绩:\n");
        scanf("%d",&chin);
        printf("英语成绩:\n");
        scanf("%d",&eng);
        printf("===============显示学生成绩===============\n");
        printf("学号   姓名    性别    出生日期    院系    专业      年级    数学语文英语\n");
        printf("%d,%s,%s,%s,%s,%s,%d,%d,%d,%d\n",num,name,gen,year,school1,school2,zhuanye,grade,math,chin,eng);
        return 0;
        }
我想问一下,为什么最后一行的成绩打印不出来呢?

jackz007 发表于 2022-10-10 12:12:36

本帖最后由 jackz007 于 2022-10-10 13:04 编辑

#include<stdio.h>

int main()
{
      int num,grade,math,chin,eng;
      char name,gen,year,school1,school2,zhuanye; // 【修改】
      printf("===============录入学生成绩===============\n");
      printf("学号: ");
      scanf("%d",&num);
      printf("姓名: ");
      scanf("%s" , name);                   // 【修改】
      printf("性别: ");
      scanf("%s", gen) ;                  // 【修改】
      printf("出生日期(2000-10-8): ");
      scanf("%s", year);                  // 【修改】
      printf("学院: ");
      scanf("%s", school1);               // 【修改】
      printf("系名: ");
      scanf("%s", school2);               // 【修改】
      printf("专业: ");
      scanf("%s", zhuanye);               // 【修改】
      printf("年级: ");
      scanf("%d",&grade);
      printf("数学成绩: ");
      scanf("%d",&math);
      printf("语文成绩: ");
      scanf("%d",&chin);
      printf("英语成绩: ");
      scanf("%d",&eng);
      printf("===============显示学生成绩===============\n");
      printf("    学号:%d\n" , num)   ;// 【以下重写】
      printf("    姓名:%s\n" , name)    ;
      printf("    性别:%s\n" , gen)   ;
      printf("出生日期:%s\n" , year)    ;
      printf("    学院:%s\n" , school1) ;
      printf("    系名:%s\n" , school2) ;
      printf("    专业:%s\n" , zhuanye) ;
      printf("    年级:%d\n" , grade)   ;
      printf("    数学:%d\n" , math)    ;
      printf("    语文:%d\n" , chin)    ;
      printf("    英语:%d\n" , eng)   ;
      return 0;
}
      编译、运行实况:
D:\\C>g++ -o x x.c

D:\\C>x
===============录入学生成绩===============
学号: 100
姓名: xyz
性别: male
出生日期(2000-10-8): 1991-06-10
学院: SWPE
系名: Explorer
专业: Geology
年级: 3
数学成绩: 98
语文成绩: 97
英语成绩: 95
===============显示学生成绩===============
    学号:100
    姓名:xyz
    性别:male
出生日期:1991-06-10
    学院:SWPE
    系名:Explorer
    专业:Geology
    年级:3
    数学:98
    语文:97
    英语:95

D:\\C>
      三个问题:
1、char 只能容纳 1 个字符,容纳字符串需要足够大的储存空间,所以,需要使用字符数组。
2、scanf("%s" , p)字符数组的名称本身就已经是内存地址,所以,直接写字符数组的名称(P)就好,不用再取其地址(& p)。
3、最后显示那行,printf() 中的10 个格式描述符对应了 11 个显示参数,造成个别参数与格式描述符之间发生了错位,由于 11 个参数的类型并不相同,结果,本来是字符串的变量 zhuanye 被使用格式描述符 "%d" 进行了显示,结果,看到的是莫名其妙的数字,其实,这个数字是变量 zhuanye 的内存地址(32 位程序的情形,如果是 64 位,看到的只是 64 位地址中的 32 位)。
页: [1]
查看完整版本: 录入学生成绩