2016-05-30 5 views
-1

を失敗しているhold4に保存された値です。変換する文字列は、私はここでは、この主題に関連する他の記事をチェックした文字列を変換する<code>atoi</code>機能を使用していますが、値は常に0</p> <p>ある

char hold4[4] = { "0", "." , "1", "5", "\0"); 

私はその後intに変換しようと、私は

int hm = atoi(hold4); 

hmとして出力し得る:

hm = 0 

私はそれがhold4の値だとしてhmは、0.15であることを期待しています。私はその後の数学演算にこの値を使用したいと思います。ここで

は私のコードです:

int x = 0; 
int pixel = 0; 
char hold[10]; 
char hold4[4]; 

for(x=0; x < linesCount; x++) 
{ 
    fscanf(model, "%c", &hold[x]); 
    if(hold[x] == '\0' || hold[x] == '\r' || hold[x] == '\n') 
    { 
     hold4[0] = hold[x-4]; 
     hold4[1] = hold[x-3]; 
     hold4[2] = hold[x-2]; 
     hold4[3] = hold[x-1]; 
     hold4[4] = '\0'; 
    // printf("new line: break\n"); 
    } 
    //printf("pixel: %c\n", hold[x]); 
} 

int hm = atoi(hold4); 

printf("\nhold4: %d\n", hm); 

は、どのように私はこの仕事をするのですか?

+0

に気付かなかったこれを試して? –

+0

あなたのコードは 'char'へのポインタを変換するための大量のコンパイラ警告を生成します。 'char *'をイニシャライザーで 'char'に格納しようとします!コンパイラの警告/エラーは単なる楽しいものではありません! – Olaf

答えて

4

整数の全体のポイントがありません。整数は整数(1、2、3、4 ...)で、小数点を持つことはできません。あなたが探しているのはフロート/ダブルです。

Try with this: atof()

+0

ありがとう、完璧に動作します。その間、私は1と5をatoiに変換し、その数値を100で割って15の浮動小数点数にするという手間を掛けました。しかし、atofはちょうど私が欲しかったのです。ありがとう – user3622460

+1

私は助けてうれしいです。私またはマイケルの答えを受け入れるようにして、将来の参照のために質問に答えるようにしてください。 – Mirakurun

2

atoi関数は、「文字の配列」を「整数」に変換します。したがって、名前は:(a)rray(to)(i)ntです。

文字の配列には小数点以下桁がありますが、atoiは0-9の範囲の文字のみを変換します。 float値は返されません。あなたの変数hmが明示的にintタイプで、あなたはまた、%dで明示的にintを値を印刷している

注意。唯一の可能性がintの値であることを保証するために必要な作業はすべて既に完了しています。

+0

ありがとうございました! – user3622460

0
char hold4[5] = { '0', '.' , '1', '5', '\0'}; 
double a = atof(hold4); 
printf("%f",a); 

あなたが唯一の4を保持するために宣言された配列に5つの値を入れた

関連する問題