2012-12-08 3 views
1

텍스트 문서에서 한 줄을 읽고 수학 방정식을 인쇄하는 프로그램을 작성하려고하지만 몇 가지 이유 때문에 두 번째 줄과 마지막 줄만 읽는 중입니다. TXT 파일.텍스트 파일의 각 행을 읽지 못함

텍스트 예를

subtraction,3,57 
multiplication,90,46 
division,26,7 
division,26,0 

코드

int main() 
{ 
    char name[21], namecopy[21]; 
    char *nc, com = 100; 
    int num1, num2, p, i; 
    FILE *file; 

    file = fopen("C:\\hw10.txt", "r"); 
    strcpy(namecopy, name); 

    while (fgets (namecopy,21,file)!=NULL) 
    { 
    fscanf(file, "%[^,]%*c %i%*c %i%*c", &name, &num1, &num2); 
    printf("%s %i %i\n", name, num1, num2);  

    if(strcmp(name, "subtraction") == 0) 
    { 
     p = num1-num2; 
     printf("%d - %d = %i \n", num1, num2, p); 
    } 

    if(strcmp(name, "addition") == 0) 
    { 
     p = num1+num2; 
     printf("%d + %d = %i \n", num1, num2, p); 
    } 

    if(strcmp(name, "multiplication") == 0) 
    { 
     p = num1*num2; 
     printf("%d x %d = %i \n", num1, num2, p); 
    } 

    if(strcmp(name, "division") == 0) 
    { 
     if(num2==0) 
     printf("undefiend\n"); 
     else 
     { 
     p = num1/num2; 
     printf("%d/%d = %i \n", num1, num2, p); 
     } 
    } 
    } 
    char ch=getchar(); 
    return 0; 
} 
+1

에 있어야합니다 대신에 fscanf를 호출하는 fgets를 호출하는 대신에 fscanf를 호출하거나 fgets를 읽고 fgets 문자열에 sscanf를 추가하면 안됩니까? – goji

+0

fgets (namecopy, 21, file)! = NULL; ----- namecopy 필드에서 읽은 값으로 무엇을하고 있습니까 ??? –

+2

strcpy (namecopy, name); 이 행은 무의미 해 보입니다. 초기화되지 않은 이름을 namecopy에 복사 한 다음 fgets로 덮어 쓰는 것입니다. – goji

답변

1

이 라인 :

fscanf(file, "%[^,]%*c %i%*c %i%*c", &name, &num1, &num2); 

sscanf(namecopy, "%[^,]%*c %i%*c %i%*c", &name, &num1, &num2); 
+0

감사합니다!, 왜 그런지 말해 줄 수 있습니까? 그래서 나는 그 기계공을 이해할 수 있습니까? –

+0

fgets는 파일에서 한 줄을 읽습니다. fscanf는 프로그램이 1 행의 입력을 포맷하지 않고 다른 행을 즉시 읽습니다. 또 다른 문제는 fscanf와 fgets를 섞어서 같은 파일을 읽으면 원하는 곳이 아닌 파일 포인터가된다는 것입니다. 지금 당장 바보 같이 붙어 라. –

관련 문제