NOIP2005奖学金这道题关于记录类型的读取

来源:百度知道 编辑:UC知道 时间:2024/05/16 20:01:31
输入格式 Input Format
输入的第一行是一个整数N(1 <= N <= 100),表示学生的总数。接下来的N行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和 100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。每两个相邻数据项之间用一个空格分隔。

我在用记录类型读取时一直调试不通过,哪位帮我看看?下面是我的读取代码.
type student=record
ming:string;
qimo:1..100;
banyi:1..100;
ganbu:char;
xibu:char;
lunwen:1..10;
end;
var
n,i,max:integer;
stu:array[1..100]of student;
a:array[1..100]of integer;
begin
readln(n);
for i:=1 to n do
with stu[i] do readln(ming,qimo,banyi,ganbu,xibu,lunwen);
end.
大家可以运行看看,我的代码错误的请指正,大家重新编写请用记录类型.

你的读入有问题

首先读入名字时因为是字符串,它不会到空格就停止,所以你得一个一个字符得读,然后加起来直到遇到空格。读干部和西部学生时因为是字符,所以中间的字符得去掉。其他的类似处理。
给个读名字的代码:
var ch:char; st:string;
begin
st:='';
read(ch);
while ch<>' ' do
begin
st:=st+ch; read(ch);
end;
end.
下一个代码:
var temp,ganbu,xibu:char;
begin
read(temp);//上次读完后还剩一个空格
read(ganbu);
read(temp);//又有一个空格
read(xibu);
readln;//下一个人
end.

其余的自己完成才能锻炼自己的能力,当年我一个人学OI时就是一直自己一个人奋斗,现在高三了,一等奖也拿了,省队也挂了,很怀念当时的日子,努力啊!

type student=record
ming:string;
qimo:integer;
banyi:integer;
ganbu:char;
xibu:char;
lunwen:integer;
end;

试试

---------这个题难就难在读入上!--------------
(1)子界类型竞赛用不大着,因为它并不能节约多少空间,而且一旦超范围程序就崩溃,也不能让你的程序快多少。直接用longint就可以。
(2)这个题需要字符串处理。因为你需要读入一行既有字符串也有整数的数据,readln函数不会像scanf一样能识别格式。这个题里它只能把读入的这一行数据全部赋给ming。
你需要一行一行的读字符串,并处理。你需要找到空格在