문제

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()를 사용합니다.

보너스:입력 끝 테스트를 구문 분석과 분리할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top