我以为我已经启动并运行了这个程序,但是在第二次查看输出文件时,我注意到计算中出现了一些"看似随机"的错误印记.在追踪所有错误的数字后,我发现了一个奇怪的错误模式,我无法解释或弄清楚,尽管我有一种感觉,它与存储在内存中的二进制代码有关.
该程序应该采用一行一行的文本文件,每行包含三个字母的格式('pre'或'pos')然后两个字母代表学校ID,两个数字表示代表班级(这种组合有4种可能性,51,52,61或62),最后两位数字代表学生的ID.第一位构成数据条目的ID标记.标签之后是一行18个单位数整数,范围从0到2.这些是学生在测试中遇到的18个问题中的每个问题得到的分数.以下是单个数据条目的示例,正在处理的文本文件各有100行.preIS6114 0 0 0 1 1 2 1 1 1 0 0 0 1 1 0 0 0 0
我遇到的问题是,当程序读取一行数据时,大部分时间读取它就好了,做了它应该做的事情,并继续前进.然而!如果ID标签的最后两位数字是08或09,程序认为学生的ID号是0,并且测试的第一个SCORE分别是8或9,这当然是不可能的,因为2是学生可以在问题上获得的最高分数.我看了,当然,在学生ID为08或09的每个实例中,都发生了这个错误.较低的ID(01到07)工作正常,ID高于09 ....所以为什么只有这两个数字?我发现这很不寻常..
这是我第二次使用这个程序,第一次,用户输入引起了各地的问题,所以有人建议先使用fgets,然后使用scanf解析数据,我做了并得到了程序工作(或者我认为..直到第二次看输出数据我才注意到这个问题)
我和C一起工作,我不是程序员,我是英语教授,所以我显然不知道有关C的一切.鉴于此,请不要担心其他问题我的程序(因为我知道有很多),除非你认为它会导致其他错误.代码非常冗长,所以我将删除所有简单的int变量声明只是为了节省空间并专注于有问题的部分.
int main()
{
char pp[4];
char school[3];
int class;
int student;
int a;
int b;
int c;
int d;
int e;
int f;
int g;
int h;
int i;
int j;
int k;
int l;
int m;
int n;
int o;
int p;
int q;
int r;
//several lines skipped here...//
while (fgets(buf, sizeof buf, stdin) …Run Code Online (Sandbox Code Playgroud)