それが「間違っている」と言う以外に、あなたがしていることがなぜ間違っているのか、まだ誰も説明していません。
C の文字列は、メモリ内の連続した文字の集まりであり、文字列の最後の文字の値は 0 です。文字列を配列に格納するか、ポインタ ( )charを使用してメモリ内のどこかを指すことができます。charchar*
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 桁の数字を変換する方法について話すこともできますが、もう十分長く怒鳴っていると思います。これが役立つことを願っています。