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