2009-12-12 5 views
0

오류입니다. 내 암호의 문제점은 무엇입니까?파일에서 자릿수를 계산하는 방법은 무엇입니까?

#include "stdafx.h" 
#include "stdlib.h" 
#include "ctype.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 

FILE* input; 
int num; 
int numCount = 0; 

    input = fopen("123.txt", "r"); 

    if (!input) 
    { 
     printf("No file \a\n"); 
     exit (101); 
    } 


    while ((fscanf(input, "%d", &num)) == 1) 
     printf("%d", num); 

    if (isdigit(input)) 
     numCount++; 


    printf("number count: %d", numCount); 

    return 0; 
} 
+1

그리고 오류의 종류에 당신은 컴파일러 오류 또는 런타임 오류로 발생한 또는한다 어쩌면 네가 원했던 방식대로 작동하지 않을 수도 있니? 이것들이 도움이 될 수도 있습니다. –

+0

errorC2664'disit ' 은 "FILE *"에서 "int"로 바꿀 수 없습니다. –

+0

"isdigit"이 무엇인지 생각해야합니다. 매개 변수 유형 (int)이 사용자를 혼동하게하지 마십시오. * 문자 *를 검사하고 전달 된 인수가 숫자 인 경우 0이 아닌 값을 반환합니다. 코드에서 fscanf 호출을 원하지 않습니다. –

답변

1
while ((fscanf(input, "%d", &num)) == 1) 
    printf("%d", num); 

if (isdigit(input)) 
    numCount++; 

한 번만 input을 확인하고 있습니다. 그리고 너는 num 대신에 inputFILE 인 것을 확인해야한다.

while ((fscanf(input, "%d", &num)) == 1){ 
    printf("%d", num); 
    if (isdigit(num)) 
     numCount++; 
} 
+0

감사합니다. 하지만 다시 오류가 발생합니다. "디버그 어설 션이 실패했습니다." –

+1

num은 fscanf에서 "% d"에 의해 설정되고 isdigit는 0-9 문자의 ASCII 값을 찾습니다. "% d"은 (는) "% c"로 변경되어야합니다. 또는 더 나은 fgetc –

2

논리가 완전히 잘못되었습니다. fgetc()를 사용하여 개별 문자를 읽고 isdigit()로 테스트해야합니다. 루프는 fgetc()가 EOF를 리턴 할 때 종료되어야합니다.

1

isdigit()는 파일 *이 아닌 문자를 테스트합니다. 당신이 뭔가를 계산하려는 경우

는 그리고 numCount ++는 루프 내부에, 그리고 을 한 번에 전체 프로그램

관련 문제