1

K&R C 第 2 版の atoi() 関数の例に問題があります。0 から 9 までの文字のみを使用する必要があります。しかし、私のプログラムのロジックのどこかで、何か間違ったことをしています。

したがって、次の関数があります。

#include <stdio.h>

int atoi(char s[]);

int main()
{
    int i;
    char ch;
    char co[50]; 
    int  ci[50];

    while(ch != EOF )
    {

        for(i=0;i<50-1 && (ch=getchar()) != EOF && ch != '\n';++i)
        {
            co[i] = ch;
            /*ci[i] = atoi(co[i]);*/ /*bugged*/
            ci[i] = atoi(co);
            printf("%d \n",ci[i]);
        }
        if(ch == '\n')
        {
            co[i] = '\n';
        }
        ++i;
        co[i] = '\0';
    }

    return(0);

}

/* as in the book: */
/* atoi: convert s to integer */

int atoi(char s[])
{
    int i, n;
    n = 0;
    for(i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
    {
        n = 10 * n + (s[i] - '0');
    }

    return(n);
}

ここに私が得ているエラーがあります:

|In function 'main':
19|warning: passing argument 1 of 'atoi' makes pointer from integer without a cast [enabled by default]
3|note: expected 'char *' but argument is of type 'char'
||=== Build finished: 0 errors, 1 warnings (0 minutes, 0 seconds) ===|
4

3 に答える 3

1
printf("%c = ",co[i]);
ci[i] = atoi(co[i]);
printf("%d \n",ci[i]);

char を int に変換しようとしていますが、char整数値です。あなたに必要なのは

printf("%c = %d\n", co[i], co[i]);

あなたが望むのは、charの10進値です。あなたがやろうとしているのがASCII数字を整数に変換することである場合、

printf("%c = %d\n", co[i], co[i] - '0');

しましょう。

于 2013-04-10T18:33:53.530 に答える
1

atoi();関数には文字列へのポインタが必要です。char*それが警告の理由ですwarning: passing argument 1 of 'atoi' makes pointer from integer without typecase

co like: と宣言しますchar co[50]; が、atoi(co[i]);これは間違っています。

char ではなく int と表示されていることに注意してください。

次のような例:

atoi("1");は有効ですがatoi('1'); 、有効ではありません。

そうでさえ、正しいが正しくないcoようなものです。"12345678"atoi(co)atoi(co[i])

于 2013-04-10T18:26:20.167 に答える