質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Q&A

解決済

1回答

1508閲覧

2重while文の動き方について

mmmw

総合スコア23

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

0グッド

0クリップ

投稿2019/11/06 07:24

編集2019/11/06 07:27

前提・実現したいこと

while(1)文の中にwhile(1)文があるとプログラムの流れ的にはどのように動いているのでしょうか。

該当のソースコード

C++

1// サーバ側 WinSock2 2 3 4 5#include <stdio.h> 6#include <winsock2.h> 7#include <ws2tcpip.h> 8#include <iostream> 9#include <stdlib.h> 10#define snprintf _snprintf 11int main() { 12 // ポート番号 13 int port_number = 12345; 14 15 // Windows Sockets仕様に関する情報を格納する構造体 16 WSADATA wsa_data; 17 18 // WinSockの初期化処理(Version 2.0) 19 if (WSAStartup(MAKEWORD(2, 0), &wsa_data) != 0) { 20 std::cerr << "Winsockの初期化失敗(WSAStartup)" << std::endl; 21 } 22 23 // サーバ側ソケット作成 24 int src_socket; 25 26 27 28 // sockaddr_in構造体の作成とポート番号、IPタイプの入力 29 struct sockaddr_in src_addr; 30 memset(&src_addr, 0, sizeof(src_addr)); 31 src_addr.sin_port = htons(port_number); 32 src_addr.sin_family = AF_INET; 33 src_addr.sin_addr.s_addr = htonl(INADDR_ANY); 34 35 36 // AF_INETはipv4のIPプロトコル & SOCK_STREAMはTCPプロトコル 37 src_socket = socket(AF_INET, SOCK_STREAM, 0); 38 39 40 // サーバ側のソケットを特定のIPアドレスとポートに紐付ける 41 bind(src_socket, (struct sockaddr *) &src_addr, sizeof(src_addr)); 42 43 44 // クライアント側のソケット設定 45 int dst_socket; 46 struct sockaddr_in dst_addr; 47 int dst_addr_size = sizeof(dst_addr); 48 49 50 // 接続の待受を開始する 51 listen(src_socket, 1)52 53 54 // 送受信に使用するバッファ 55 char recv_buf1[256]; 56 char send_buf[256]; 57 58 59 // クライアントからの接続待ちループ関数 60 while (1) { 61 // クライアントからの接続を受信する 62 dst_socket = accept(src_socket, (struct sockaddr *) &dst_addr, &dst_addr_size); 63 64 // 接続後の処理 65 while (1) { 66 int status; 67 float a; 68 69 //パケットの受信(recvは成功すると受信したデータのバイト数を返却。切断で0、失敗で-1が返却される 70 int recv1_result = recv(dst_socket, recv_buf1, sizeof(char) * 256, 0); 71 if (recv1_result == 0 || recv1_result == -1) { 72 status = closesocket(dst_socket); break; 73 } 74 a = atof(recv_buf1); 75 snprintf(send_buf, 256, "%+011.6f", a); 76 printf("%+011.6f\n",a); 77 78 // 結果を格納したパケットの送信 79 send(dst_socket, send_buf, sizeof(char) * 256, 0); 80 } 81 } 82 83 // WinSockの終了処理 84 WSACleanup(); 85 return 0; 86 87}

補足情報(FW/ツールのバージョンなど)

visual studio2012

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

breakで、直近のwhileのループから抜けます

投稿2019/11/06 07:31

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問