2013-01-15 16 views
2

나는 char가되어야하기 때문에 examID를 나타내는 숫자를 보유하는 char 변수를 하나 가지고 있습니다. 내 텍스트 파일은 다음과 같다 : 각 라인의텍스트 파일에서 읽기 C

5 1 Exam 1 (audit 31.10.) 
6 1 Exam 2 (audit 23.10.) 
14 1 Lab 01 (audit 21.11.) 
16 1 Lab 02 (audit 28.11.) 
... 

첫 번째 숫자는 examID이고, 둘째 그 시험 점수의 최대 납입하고, 라인 텍스트의 끝 나머지는 시험 이름입니다. 나는 examID 일치를위한 텍스트를 검색해야하고, 일치하는 경우 나중에 사용할 수 있도록 변수의 최대 개수와 검사 이름을 저장해야합니다.

char examName[100]; 
char tmp[100]; 
int examID; 
int maxPoint=0; 

FILE *fin=fopen("Exams.txt", "r"); 

while(fgets(tmp, sizeof(char)*100, fin)!=NULL) { 
    sscanf(tmp, "%d", &examID); 
    if(examID==s.examNum) 
     printf("%d", examID); 
} 

그래서 내가 경기를 발견하고 인쇄하고, 괜찮아요,하지만 난 라인과 시험의 이름으로 두 번째 숫자를 읽는 방법을 모르는이 내가 지금까지있는 것입니다.

답변

3

당신은 거의 있었다 :

sscanf(tmp, "%d %d %[^\n]", &examID, &maxPoint, examName); 
if(examID==s.examNum) 
    printf("%d %d %s\n", examID, maxPoint, examName); 

fgetssscanf가 포맷 스트링 쇼로 구문 분석 한 후, 같은 전체를 읽습니다. 따라서 번호가 필요하면 숫자를 입력 한 다음이 문자열을 사용할 수 있습니다. "%d %d %[^\n]"

참고 : examName에는 공백이 있고 (줄 바꿈 전에 텍스트 파일의 목록 부분이므로)


사이드 노트 "줄 바꿈이 문자열로 저장 찾을 때까지 내가 모든 것을 할"sscanf을 말하는 부정 scanset, 당신의 vairables 초기화 : 또한

char examName[100] = {'\0'}; 
char tmp[100] = {'\0'}; 
int examID = 0; 
+0

작은 메모를, 아니 '및'제공이 없습니다 식별자가 al이기 때문에'sscanf'의 examName에 포인터를 준비하면 배열의 첫 번째 요소를 가리 킵니다. – AlienHoboken

+0

팁 주셔서 감사하지만, 그것은 단지 작동하지 않습니다. 출력은 다음과 같이 보입니다 : 5 0 그 다음 이상한 문자. 5는 올바른 숫자이고, 0은 틀립니다 (모든 예에서 올바른 숫자 대신 0을 가짐). 문자열이이 세상에서 완전히 벗어났습니다. – yahzee

+0

@yahzee - 이상한데, 먼저 내 쪽지를 확인하고 시도해보십시오. 초기화되지 않은 것처럼 들립니다. 데이터. 여전히 이상한 결과가 나오면 더 완벽한 코드 샘플로 업데이트하십시오. 당신이 텍스트 파일과 함께 위의 코드를 주면이 작업을 올바르게 볼 수 있습니다. – Mike