2014-09-21 4 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

вызов 'frequency (integers, i, x);' – BLUEPIXY

ответ

0

Я не знаю, почему вы инициализируете так много переменных, а некоторые из них с неудобными именами, такими как ??????.

Вашей главная проблема заключается в том, что вызов function должен быть

frequency(integers, i, x); 

Вашего код с неудобными несущественными деталями удалены будет выглядеть

#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

Чтобы вычислить длину массива:

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

Он даст длину массива без зацикливания.

Смежные вопросы