2016-05-29 7 views
-2

私はキーボードで導入した配列から数値を抽出し、1つの整数に変換します。私のコードは次のとおりです。printf関数を表示せずに配列とプログラムから整数値を抽出します

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main(void) 
{ 
    int r, t, i; 
    char expressio[t]; 
    char vector[50]; 
    char rpn[t][4]; 

    printf("Introduce the expresssion"); 
    fgets(expressio, t, stdin); 

    t = strlen(expressio); 

    for (i = 0; i <= t; i++) { 
     if (isdigit(expressio[i])) { 
      r = atoi(expressio[i]); 
      vector[i] = rpn[0][r]; 
     } 
     return 0; 
    } 
} 

私はこの警告持っている: 'ATOI' の引数1を渡し

キャストなしで整数からポインタを行い

私はそれを解決するにはどうすればよいですか?

また、私はこのプログラムを実行すると何もせず、 "式を導入する"さえ印刷しません。なぜこうなった?

+0

コンパイラの警告を有効にし、エラーとして処理してください! 't'は定義されていません。そして 'atoi'のmanページを見てください。 –

+0

'-Wall -O2'引数でコードをビルドしようとすると、コードが正しく動作しない理由を考え始める前に修正すべき4つの警告が表示されます。 'atoi()'警告について - [man atoi](http://linux.die.net/man/3/atoi)を見てください: 'const char'に**ポインタ**を与えることを期待しています(つまり文字列)が、代わりに 'char'を与えています。 –

+0

ループを見て、誤って戻りを入れてしまい、プログラムが終了します。そして、 "式を導入する"が表示されないのは、cの出力がフラッシュされたときにのみ更新されるstdoutと呼ばれるFILEに格納されているためで、stdoutは通常改行またはプログラム終了時にフラッシュされるからです。プログラムの終了後ではなく、実行時にそれを見るために\ nを追加してみてください。 –

答えて

0

警告は、関数に不正な引数を渡していることを意味します。 「税引後営業利益」引数として文字の配列を期待されますが、ここでは、引数として単一のcharを渡している:あなたは数に単一文字を変換したい場合は

r = atoi(expressio[i]); 

は、あなたが行うことができます:

r = expressio[i] - '0'; 

asciiテーブルを見ると、0のascii値は48であることに気が付くでしょう。48(または私のように0のascii値)をchar expressio [i]に差し引くと、対応する数値を整数として取得します。このように、expressio [i]が '8'に等しい場合、rは8になります。

関連する問題