回答編集履歴

1 コードの部分を組み込みテキストにした。

romitagari

romitagari score 7

2017/08/02 23:55  投稿

まず、C言語で文字列は文字型の配列として扱われ、配列どうしの比較演算は定義されていない事(つまり、文字列同士の比較は==や!=では行えないという事)を念頭に置いて、この後の話を読んでいだたきたいと思います。
まず、(int)bufを
```C  
printf("%d\n",(int)buf);
```  
のようにして書き出してみてください。
恐らく適当な値(数十万程度)が出力されると思います。
それをsと比較すると、絶対に一致するはずのないことがわかります。
これは、bufはbuf配列の先頭アドレスを示しており、(int)bufはそのアドレスをint型にキャストしたものになってしまうからです。
ですので、まずはbuf配列の中身を数字として書き出す必要があります。
C++を使っているのであれば数ステップで変換できるのですが、C言語だと些か面倒ですので、範囲を1-10に限定したコードを例示します。
```C  
const int ABNORMAL -1;
int buf_i;
if(strlen(buf)==1){
 buf_i = buf[0]-'0';
}
else if(buf[0]==1 && buf[1]==0){
 buf_i = 10;
}
else{
 buf_i = ABNORMAL;
}
```  
このコードの後に、
```C  
if(buf_i != ABNORMAL){
 //処理
}
```  
などを使って10以外の数値が入力された場合の処理をかけばいいとおもいます。
質問者様の意図に沿った回答ができているか不安ですので、わからない場合は返信していただければお答えいたします。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る