사용 fgets()
및 strtok()
입력 수신 및 그에 따라 분할하는 데 문제가 있습니다.
입력 1-9를받는 주 메뉴가 있고 모든 입력이 다른 기능으로 연결된다고 가정합니다. 모든 함수에 대해 if 문과 break 문으로 그렇게했습니다. 이제 문자열, 공백, 정수 2 개를받는 또 다른 명령이 있다고 가정 해 봅시다. 메뉴에 어떻게 쓸까요?
그것은 메뉴에서 언제든지 개별 int (1-9) 만 읽을 수 있으며 let say "start 5,9,forward"
또는 "start ,4,2,backwards"
해당 메뉴를 읽을 수도 있습니다. "시작"이 입력되고 있으면 계속 진행하지만 시작 후 공백 입력을 읽고 2 개의 정수와 마지막을 읽도록 만드는 방법을 모르겠습니다. 끈.
내 질문이 약간 혼란 스럽지만 한 줄에 여러 입력을 받고 해당 입력 변수를 조작 할 수 있는지 예를 알고 싶습니다.
fgets
및 사용 strtok
:
@Cool Guy가 말한 것과 거의 같습니다.
...
fgets(buff, sizeof buff, stdin);
char a[25], d[25];
int b, c;
char *p = strtok(buff, ", "); //this will cut the input at an occurrence of `,` or `' '`, whatever happens first. At this point you would have the string "start" pointed by `p`.
strcpy(a, p);
p = strtok(NULL, ", ");
if(p) {
b = atoi(p);
if(b < 0 || b > 9) {
//input error
}
}
p = ...
나머지는 유사합니다.
scanf 솔루션 사용 :
scanf를 사용하여 입력을 읽을 수 있습니다 (예, 강력한 기능입니다).
scanf(" %N[^,' '] ,%1d%*[^,' '] ,%1d , %N[^\n]", a, &b, &c, d);
" %N[^,' ']"
첫 번째 ,
또는 ' '
(공백)에 도달 할 때까지 입력을 읽 습니다. 또한 N을 a
-1 의 크기로 바꾸십시오 .
%1d%*[^,' ']
한 자리의 정수를 읽고 a ,
를 찾아서 저장할 때까지 나머지 입력을 버립니다 b
.
%N[^\n]
나머지 줄을 읽고 d
. N을 d
-1 의 크기로 바꿉니다 .
scanf와 함께 사용할 수있는 많은 트릭이 있습니다. 이 경우 모든 공백은 scanf 형식 내에서 중요합니다. 또한 사용자가 잘못된 입력 형식을 입력하는 경우를 처리하지 않지만 가능합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다