【发布时间】:2012-02-12 17:57:57
【问题描述】:
我在完成 C++ 的学校作业时遇到了一些麻烦。我遇到的具体问题涉及从包含一系列 5 到 6 级的文件中读取行。每个学生的成绩一起显示在学生姓名和身份证号后面的一行中。这里的挑战是等级之间可以有可变数量的空格,如果只有 5 个等级存在,则需要生成一条错误消息进行筛选,但程序要继续运行并对 5 个等级进行平均。输入示例:23 46 68 85 98
我很容易得到学生姓名和身份证,但数字字符串给我带来了问题。我的计划是 getline 然后标记字符串并将每个标记分配给数组中的一个单元格。这适用于 6 个等级,但当仅存在 5 个等级时,它会将垃圾分配给第六个单元格。
这是与本节相关的代码的 sn-p:
fin.getline(gradeList, 200);
grade = strtok (gradeList, " ");
while (grade != '\0')
{
gradeArr[cycler] = atoi(grade);
grade = strtok(NULL, " ");
cycler++;
}
我尝试在将每个标记转换为 int 之前对其进行 isdigit 检查,并为任何未通过 isdigit 检查的标记写入 0,但这根本不起作用。当只有 5 个等级时,它似乎正在从下一行中提取名称,然后当它出现时,它会将其更改为一个巨大的数字。
我认为当程序执行 getline 时,它只会抓取该行,直到它看到 endline 终止符。这不是正在发生的事情吗?
【问题讨论】:
标签: c++