试图使用atoi而它不起作用

时间:2017-03-31 21:22:53

标签: c

这些是我得到的错误:

    search.c: In function ‘checkGrades’:
    search.c:63: warning: passing argument 1 of ‘atoi’ makes pointer from 
    integer without a cast
    /usr/include/stdlib.h:148: note: expected ‘const char *’ but argument is 
    of type ‘char’
    search.c:63: error: expected ‘)’ before ‘;’ token

这是我的代码:

    int checkGrades(STUDENT grades[], int maxrecs, FILE* fp)
    {
    char line[LINE_MAX];
    int rc;
    int count = 0;
    int score;
    char id;
    while(fgets(line,LINE_MAX, fp) != NULL)
    {
    rc = sscanf(line,
    "%25[^:]%*c%25[^:]%*c%6s%*c%3d%*c%3d%*c%3d%*c%3d%*c%3d%*c%2c",
                 grades[count].id,
                &grades[count].score[1],
                &grades[count].score[2],
                &grades[count].score[3],
                &grades[count].grade);
    if((rc != 9) ||

                    rc == atoi (id);

                 grades[count].id < 100000 ||
                 grades[count].id > 999999 ||
                 grades[count].grade < 0 ||
                 grades[count].grade > 110)
    {


            printf("Invalid Record: %s", line);
    }
    else
    {
        count++;
        if(count == TNARRAY_MAX)break;
    }
    printf("ID: ", grades-> id);
    }

我不确定rc是否应该用于atoi,我是C的初学者,我尝试了很多组合但没有成功。我知道我需要在比较之前将字符串转换为int,但我在这里完全失去了如何做到这一点。 任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

atoi函数需要一个指向const字符串的指针,如下所示:(const char * str)

您可以在此处查看其用法示例:https://www.tutorialspoint.com/c_standard_library/c_function_atoi.htm

另外我不确定你是不是想要复制你的整个代码(我假设LINE_MAX和TNARRAY_MAX是在某处定义的宏?)但是就目前而言你有一个大括号不匹配,这意味着这段代码就像你发布它一样最后还需要一个'}'。

答案 1 :(得分:0)

你不能在一个角色上使用atoi。你可以做的是将字符转换为整数,然后减去字符的ASCII值&#39; 0&#39; 0从中。

int num;

num = (int)id - (int)'0';

此外,正如评论中所指出的,您实际上并未初始化ID。