2012-09-20 6 views
-1

도움을 주셔서 감사합니다 ...하지만 여전히 화면에 300,400을 인쇄하지 않습니다. 아래는 내 fullcode입니다 : 파일 [file contain : S (300,400)]이 commandprompt에서 전달되고 S, 첫 번째 괄호, 쉼표 또는 마지막 닫는 대괄호를 읽지 않고 두 개의 값을 읽습니다.scanf로 대괄호를 건너 뛰는 방법

#include <stdio.h> 
int a; 
int b; 
int main (int argc, char *argv[]) 
{ 

    if (argc != 2) /* argc should be 2 for correct execution */ 
    { 
     /* We print argv[0] assuming it is the program name */ 
     printf("usage: %s filename", argv[0]); 
    } 
    else 
    { 
     // We assume argv[1] is a filename to open 
     FILE *file = fopen(argv[1], "r"); 

     /* fopen returns 0, the NULL pointer, on failure */ 
     if (file == 0) 
     { 
      printf("Could not open file\n"); 
     } 
     else 
     { 
      /*reading file.. 
      while (fscanf(file, "S(%d,%d)", &a, &b) == 2) 
      { 
       printf("%d,%d", a, b); 
      } 


      fclose(file); 
     } 
    } 
} 
게시 된 코드 ( fscanf()a을 채우고 1를 반환으로) 하나의 정수를 읽을 수로

while (2 == fscanf(file, "S(%d,%d)", &a, &b)) 
{ 
    printf("%d %d", a, b); 
} 

fscanf()의 반환 값에 대해 2 비교 만에 : 스캔 세트가 필요하지 않습니다

답변

4

너무 복잡합니다. 그냥 말 그대로 숫자가 아닌 부분을 포함한다 :

또한
while(fscanf(file, "S(%d,%d)", &a, &b) == 2) 
    printf("got S(%d,%d)\n", a, b); 

printf() 감각을 많이하지 않는, 패턴을 지원하지 않습니다.

+0

도와 주셔서 감사합니다 ...하지만 여전히 화면에 300,400을 출력하지 않습니다. 아래는 내 전체 코드입니다 : –

+0

괜찮아요. –

2

, 단지 사용 ab을 올바르게 사용하십시오.

+1

: 여기에 하나 개의 온라인 상태입니다. –

+0

@ E_net4, 항상 왼쪽에 리터럴을 두는 습관이 있습니다 (수정할 수 없음). – hmjd

+2

@ E_net4'당신의 요다 비교에 놀라서 ... 12. – halfelf

0

정규 표현식을 구문 분석하고 검사하는 유틸리티를 사용하는 것이 좋습니다. http://www.regextester.com/

는 많은 사람들이있다 ... 나는 당신의 요다 비교하여 놀란다

관련 문제