• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:for文の繰り返し処理について)

IPアドレスを表示するプログラムの改善方法は?

このQ&Aのポイント
  • 質問文章のプログラムはIPアドレスを表示するもので、条件によって表示されるアドレスが異なります。しかし、処理を繰り返すと同じアドレスが表示されることや、条件に合うアドレスが表示されないことがあります。
  • 質問者は、処理を繰り返す回数や条件を変えても、条件に合致するアドレスが表示された時点で処理を終了する方法を知りたいと述べています。
  • プログラムの改善方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

「補足」への回答です。状況が今ひとつ不分明ですが、「このアドレスを何かの変数に代入して別の部分でも表示したい」ということでしたら、 int main() { ... char *addr_ptr; char buf[256]; // ここへ移動 char *p = ""; // 追加 buf[0] = 0; // 念のため ... ... for (i = 0; i < 5; i++) { ... sprintf(buf, "%s", inet_ntoa(*(struct in_addr *) addr_ptr)); if (strncmp(buf, "196", 3) == 0) { printf("Your Address: %s\n", buf); p = buf; // 追加 break; } ... ... printf(("別の部分での表示%s\n", p); return 0; } とすれば、break 以降 p で "196.~" のアドレスが文字列として参照できます(196 で始まるアドレスが無かったときには p は空文字列 "" を指します)。 ということでよろしいでしょうか。

noname#89227
質問者

お礼

 お礼遅くなってすみませんm(__)m 先頭が196から始まるアドレスだけの表示と、この取得できたアドレスを別の部分表示することがoldroot2005さんのおかげで、できました。 どうもありがとうございました。

その他の回答 (1)

回答No.1

下のように if が成立したときに break で for を脱出すればよいと思います。 for (i=0; i<5; i++) { char buf[256]; addr_ptr = (char *)&pUdpTable->table[i].dwLocalAddr; sprintf(buf, "%s", inet_ntoa(*(struct in_addr *)addr_ptr)); if(strncmp(buf, "196", 3) == 0) { // { を追加 printf("Your Address: %s\n", buf); break; // 追加 } // } を追加 }

noname#89227
質問者

補足

 質問をもう一つ書きそびれたのでここで補足させていただきます。 ここで例えば Your Address:196.1.2.3 と表示されたとする時、このアドレスを何かの変数に代入して別の部分でも表示したいと考えています。しかし、単に printf("別の部分での表示%s\n",buf); とすると196以外から始まるアドレスのほかに、5回繰り返し処理された5つのアドレスも表示されてしまうので、うまく代入して表示するのはどうすればよいかも教えていたいただけませんか? お願いします。

関連するQ&A