2014-09-21 2 views
0

파일 크기를 계산하려고합니다. 내가 따라 한 과정은 파일을 읽고 배열에 저장하고 크기를 계산하는 것입니다. 그러나, 나는 정말로 모른다 ... 나는 많은 방법을 시도했다. 나는이 크기를 주파수 함수에 속성으로 전달할 것이다. 배열의 이름과 함께.배열 크기 계산

#include <stdio.h> 
#include<conio.h> 

void frequency (int theArray [ ], int ??????, int x) 
{ 
    int count = 0; 
    int u; 

    for (u = 0; u < ??????; u++) 
    { 
     if (theArray[u]==x) 
     { 
      count = count + 1 ; 
      /*printf("\n%d",theArray[u]);*/ 
     }  
     else 
     { 
      count = count ; 
     } 
    } 
    printf ("\nThe frequency of %d in your array is %d ",x,count); 
} 

void main() 
{ 
    FILE*file = fopen("num.txt","r"); 
    int integers[100]; 
    int i=0; 
    int r = 0; 
    int num; 
    int theArray[100]; 
    int there[100]; 
    int n; 
    int g; 
    int x; 
    while(fscanf(file,"%d",&num)>0) 
    { 
     integers[i]=num; 
     printf("\n%d",(integers[i])); 
     there[r] = integers[i]; 
     i++; 
    } 
    //printf("%d",there[r]); 

    //printf("\n%d",file); 

    //fclose(file); 

    printf ("\n OK, Thanks! Now What Number Do You Want To Search For Frequency In Your Array? "); 
    scanf("\n%d", &x);/*Stores Number To Search For Frequency*/ 
    frequency(integers,????????,x); 

    getch(); 
    fclose(file); 
} 

는 파일을 읽고 저장 한 정수 배열의 크기입니다.

파일을 복사 한 배열의 크기를 계산할 수있는 방법을 찾지 못했습니다. 내 아이디어는 그 파일에있는 숫자의 빈도를 계산하고 발생 확률을 계산하여 엔트로피를 계산하는 것입니다. 제안하십시오.

+0

배열의 길이를 계산하는 함수가 있는지 모르겠지만 모든 요소를 ​​-1로 초기화 한 다음 모든 데이터를 복사하고 마지막까지 -1까지 검사 할 수 있습니다. 또한 좋은 코딩을 위해서는 각 문자를 구분해야하므로 별개의 트랙이 필요합니다. – Avinash

+0

이것을 확인하십시오. http://stackoverflow.com/questions/8236/how-do-you-determine-the-size-of-a-file-in-c – nem035

+1

'주파수 (정수, i, x);를 호출하십시오. – BLUEPIXY

답변

0

많은 변수를 초기화하는 이유가 무엇인지 알지 못합니다. 그 중 일부는 ??????과 같은 어색한 이름으로 초기화됩니다.

귀하의 주요 문제

#include <stdio.h> 
#include<conio.h> 

void frequency (int theArray [ ], int number, int x) 
{ 
    int count = 0; 
    int u; 

    for (u = 0; u < number; u++) 
    { 
     if (theArray[u]==x) 
      count++; 
    } 
    printf ("\nThe frequency of %d in your array is %d ",x,count); 
} 

void main() 
{ 
    FILE*file = fopen("num.txt","r"); 
    int integers[100]; 
    int i=0; 
    int num; 
    int x; 
    while(fscanf(file,"%d",&num)>0) 
    { 
     integers[i]=num; 
     printf("\n%d",integers[i]); 
     i++; 
    } 

    printf ("\n OK, Thanks! Now What Number Do You Want To Search For Frequency In Your Array? "); 
    scanf(" %d", &x);/*Stores Number To Search For Frequency*/ 
    frequency(integers,i,x); 

    getch(); 
    fclose(file); 
} 
0

이 코드에는 의미가없는 부분이 많이 있지만, 문제를 파악하기 위해 디버깅을한다고 가정합니다. 귀하의 특정 질문에 대한 답변은 다음과 같습니다 :

파일에서 읽은 값마다 정수 [i]를 값으로 설정 한 다음 i를 증가시킵니다. 따라서 i는 정수로 표시된 항목의 수입니다. 그런 다음 정수를 frequency()에 전달하므로 두 번째 매개 변수로 숫자를 전달해야합니다.

파일에 100 개가 넘는 값이 있으면 인덱스 정수를 초과하여 예기치 않은 동작이 발생합니다.

0

배열의 길이를 계산하기 위해 같은 function에 대한 호출이

frequency(integers, i, x); 

제거 어색한 관계없는 부품 귀하의 코드 모양을해야한다는 것입니다 :

int len= sizeof(arr)/sizeof(arr[0]); 

반복하지 않고 배열의 길이를 제공합니다.