录入学生成绩
#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 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]