それが「間違っている」と言う以外に、あなたがしていることがなぜ間違っているのか、まだ誰も説明していません。
C の文字列は、メモリ内の連続した文字の集まりであり、文字列の最後の文字の値は 0 です。文字列を配列に格納するか、ポインタ ( )char
を使用してメモリ内のどこかを指すことができます。char
char*
10 進数を入力すると、たまたま から までの範囲にある個々の文字が読み取ら'0'
れます。'9'
オプションの'-'
. これらを文字列として読み取ります。それらを整数として扱いたい場合は、(一連のchar
値ではなく) 整数データ型に変換する必要があります。
atoi
もはやファッショナブルではありませんが、そのようなものが役立ちます。を使用する必要がありますstrtol
。unsigned
[ 、long long
、またはそれらの組み合わせ、double
および型を処理するためのこれらの関数のファミリ全体がありfloat
ます]。
これで、質問の約半分に取り組みます。今、あなたはそれを使用しstrcmp
、それが機能することを期待しています. あなたがしていることにはいくつかの間違いがあります。主なエラーは、整数を文字列として扱うことができないことです。本当に文字列比較を使用したい場合は、整数を文字列に変換する必要があります。つまり、行うことの逆を行いますstrtol
。
それはより大きな議論であり、あなたの場合は正しい方法ではないので、私はそれに立ち入りません. ただし、すべてが等しい場合、間違った型を に送信していることを指摘したいと思いますstrcmp
。2 つのchar*
ポインター ( const char *
、本当に) が必要です。あなたが行ったことは、最初の要素input
の a へのポインターを逆参照し、2 番目char
の要素に an を渡すことint
です。
strcmp(*input,i[0])
ポインタは基本的に単なる数値です。一部のデータのメモリアドレスを提供します。この場合、データはchar
型 (1 バイト) であると予想されます。strcmp
関数は有効なメモリ アドレス (実際にスタックまたはヒープにあるもの) を期待しています。しかし、あなたが与えるのは*input
(入力文字列の最初の文字の値) とi[0]
(数値1
) です。
これらのコンパイラの警告は、非常に重要なことを示していました。=)
したがって、完全を期すために(他の人はすでにこれに答えていますが)、文字列の比較を忘れて(Cの文字列についてもっと学ぶために心に留めておいてください)、これを行う必要があります:
int value = strtol( input, NULL, 10 );
if( value == i[0] )
printf("1 chosen");
if( value == i[1] )
printf("2 chosen");
これについては他にも方法があります。文字列から 1 桁の数字を変換する方法について話すこともできますが、もう十分長く怒鳴っていると思います。これが役立つことを願っています。