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...
}
*/
Reference
이 문제에 관하여(PHP에서 표준 입력에서 값을받습니다 (경기 프로그래밍 등)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/dev100kg/items/d49c855b1400e35164ec텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)