修复了“将无效参数传递给认为无效参数致命的函数”的问题

时间:2019-01-24 00:09:12

标签: c enums strtok unhandled-exception

我正在尝试通过.csv文件解析此类格式

患者,分钟,卡路里,距离,地板,心脏,步数,睡眠水平

该行之前已被修改,因此行(a ,,)中的空值更改为,-1,并且在此之前最后加了一个逗号,因此,如果sleep_level为空,它也将获得-1值

            strcpy(data[i].patient, strtok(line, ",")); 
            //Detect for correct patient
            if (data[i].patient == patient) {
                printf("Wrong patient, skiping data");
            }
            else {
                //Minute (string)
                strcpy(data[i].minute, strtok(NULL, ","));
                if (i != 0 && strtok(NULL, ",") == data[i - 1].minute) {
                }
                else {

                    //Calories (double)
                    data[i].calories = atof(strtok(NULL, ","));
                    //Distance (double)
                    data[i].distance = atof(strtok(NULL, ","));
                    //Floors(unsigned int)
                    data[i].floors = atoi(strtok(NULL, ","));
                    //Heart Rate(unsigned int)
                    data[i].heartRate = atoi(strtok(NULL, ","));
                    //Steps(unsigned int)
                    data[i].steps = atoi(strtok(NULL, ","));

                    //Sleep level (enumertated var)
                    int sleepLvl = atoi(strtok(NULL, ",")); <-BREAKS HERE
                    if (sleepLvl == 0 || sleepLvl == -1) {
                        data[i].sleepLevel = NONE;
                    }
                    else if (sleepLvl == 1) {
                        data[i].sleepLevel = ASLEEP;
                    }
                    else if (sleepLvl == 2) {
                        data[i].sleepLevel = AWAKE;
                    }
                    else {
                        data[i].sleepLevel = REALLYAWAKE;
                    }

                    //Increment the index
                    i++;
                }

此代码使用令牌将逗​​号与已解析的行一起使用,一次将信息提取到一个部分,然后将其放入结构数组中以存储所有数据。应该注意的是sleep_level是一个ENUM,但是我认为我的处理方式是正确的。

代码在<-中断处中断,出现未处理的异常:将无效参数传递给认为无效参数致命的函数。

此数据的格式行示例为 12cx7,0:01:00,0.968900025,-1,0,67,0,1,

我应该在strtok中使用什么(我认为是错误的根源)来正确解析最后一个值?

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题,程序中较早的时候存在比较代码字符串的问题