문제
fscanf를 사용하여 다음과 같은 줄이 있는 파일을 읽고 있습니다.
숫자 <-공백-> 문자열 <-공백-> 선택사항_3rd_열
각 열에서 숫자와 문자열을 추출하고 싶지만 세 번째 열이 있으면 무시하세요.
예시 데이터:
12 푸 뭔가
03바
24 뭔가 #randomcomment
나는 12,foo를 추출하고 싶습니다.03,바;24, 뭔가 "뭔가"와 "#randomcomment"를 무시하면서 뭔가
나는 현재 다음과 같은 것을 가지고 있습니다
while(scanf("%d %s %*s",&num,&word)>=2)
{
assign stuff
}
그러나 세 번째 열이 없는 줄에서는 작동하지 않습니다.두 번째 문자열 이후의 모든 내용을 무시하도록 하려면 어떻게 해야 합니까?
해결책
가장 간단한 솔루션은 Scanf ( " %d %s", & num, & word), fgets ()를 나머지 줄을 먹는 것 같습니다.
다른 팁
문제는 %*s
세 번째 열이 없을 때 다음 줄에서 숫자를 섭취하고 다음에 %d
다음 토큰은 숫자가 아니기 때문에 실패합니다. 사용하지 않고 고치기 위해 gets()
그 뒤에 sscanf()
, 지정된 문자 클래스를 사용할 수 있습니다.
while(scanf("%d %s%*[^\n]", &num, &word) == 2)
{
assign stuff
}
그만큼 [^\n]
가능한 한 많은 캐릭터와 일치한다고 말하면서 *
이전과 같이 과제를 억제합니다. 또한 당신은 %s
그리고 %*[\n]
, 그렇지 않으면 형식의 공간이 Newline과 일치하기 때문에 %*[\n]
당신이 원하는 것이 아닙니다.
fgets ()를 사용하여 한 번에 한 줄을 읽은 다음 sscanf ()를 사용하여 관심있는 두 열을 찾으십시오. 더 강력하고 후행 데이터를 무시하기 위해 특별한 일을 할 필요가 없습니다.
나는 종종 당신이 방금 얻은 문자열에 대해 gets()와 sscanf()를 사용합니다.
보너스:입력 끝 테스트를 구문 분석과 분리할 수 있습니다.