2017-03-31 4 views
-2

これらの作業ではないことは、私が取得していますエラーです。ここはatoi関数を使用しようとは

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とiveのために成功なしで多くのコンボを試しました。私は比較する前に文字列をintに変換する必要があることを知っていますが、ここでそれを行う方法はかなり失われています。 ご協力いただければ幸いです!

+2

'atoi'の最初の引数は' char * 'の文字列になっています。 'id'は' char'ではなく 'char'です。 – Barmar

+2

あなたは決して 'id'も設定しません。 – Barmar

+0

'(rc!= 9)||'が '||'の後に別の条件を見つけていない場合 – Barmar

答えて

0

1文字にatoiを使用することはできません。その代わりに、文字を整数にキャストしてから、文字 '0'のASCII値を減算することができます。コメントで指摘したように

int num; 

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

また、あなたが実際にIDを初期化しません。

1

ATOI機能は、このように、constの文字列への単一のポインタを期待:あなたがここにその使用例を見ることができます

(のconst char型*文字列):またhttps://www.tutorialspoint.com/c_standard_library/c_function_atoi.htm

私はわかりませんあなたはコード全体をコピーすることを意図していました(LINE_MAXとTNARRAY_MAXはどこかで定義されたマクロですか?)が、中括弧の不一致があります。終わり。

関連する問題