PHP에서 표준 입력에서 값을받습니다 (경기 프로그래밍 등)

40세에 리치가 걸려 있는 아저씨가 어쨌든 경기 프로그래밍에 일어났다



업무에서는 매니지먼트(그것도 인프라계)를 하고 있으므로, 드디어, 컷이 되어, 지난 달당부터, 경기 프로그래밍에 눈을 떴습니다.

1개월도 지나고 드디어 표준 입력으로부터 값을 받는 것에도 익숙해져 왔으므로, 일단, 정리.

패턴별: 값을 받는 방법



한 줄에서 하나의 값을 받는 경우



샘플 입력


3

코드


$a=intval(trim(fgets(STDIN)));
//do something...

한 줄에서 여러 값을 받는 경우



샘플 입력


1 2 3

코드


fscanf(STDIN,"%d %d %d",$a,$b,$c);
//do something...

별해
$input=explode(' ',trim(fgets(STDIN)));
$a=intval($input[0]);
$b=intval($input[1]);
$c=intval($input[2]);
//do something...

여러 행에서 행당 여러 값을 받는 경우 (행 수 있음)



샘플 입력


3
1
2
3

코드


$n=intval(trim(fgets(STDIN)));
for($i=0;$i<$n;++$i){
    $a=intval(trim(fgets(STDIN)));
    //do something...
}

여러 행에서 행당 여러 값을 받는 경우 (행 수 있음)



샘플 입력


3
1 2 3
4 5 6
7 8 9

코드


$n=trim(fgets(STDIN));
for($i=0;$i<$n;++$i){
    fscanf(STDIN,"%d %d %d",$a,$b,$c);
    //do something...
}

여러 행에서 행당 하나의 값을 받는 경우(행 수 없음)



샘플 입력


1
2
3

코드


/* これだと0が入ってくるとループが止まってしまうのでNG
while($a=intval(trim(fgets(STDIN)))){
   //do something...
}
*/

//これなら大丈夫!
while(list($a)=fscanf(STDIN,"%d")){
    //do something...
}

/* これだと空行が混じると値を2回とってしまう
while(fscanf(STDIN,"%d",$a)){
    //do something...
}
*/


별해
/* これだと空行が0になる
while(!feof(STDIN)){
   $a=intval(trim(fgets(STDIN)));
   //do something...
}
*/

//これなら大丈夫!
while(strlen($a = trim(fgets(STDIN)))>0){
    $a = intval($a);
    //do something...
}

여러 행에서 행당 여러 값을 받는 경우 (행 수 없음)



샘플 입력


1 2 3
4 5 6
7 8 9

코드


/* 空行が混じると同じ値を二度繰り返すのでNG
while(fscanf(STDIN,"%d %d %d",$a,$b,$c)){
   //do something...
}
*/

//空行対策版
while(list($a,$b,$c)=fscanf(STDIN,"%d %d %d")){
   //do something...
}


별해
/* 空行が混じると同じ値を二度繰り返すのでNG
while(!feof(STDIN)){
   fscanf(STDIN,"%d %d %d",$a,$b,$c);
   //do something...
}
*/

// これなら大丈夫(空行検出時はループしない)
while(strlen($input=trim(fgets(STDIN)))>0){
   sscanf($input,"%d %d %d",$a,$b,$c);
   //do something...
}

/* 空行は空行として扱いたい版
while(!feof(STDIN)){
   list($a,$b,$c)=fscanf(STDIN,"%d %d %d");
   //do something...
}
*/

좋은 웹페이지 즐겨찾기