2015-02-11 3 views
0

Это мой код до сих пор:Получить определенное количество элементов в массиве

#include "stdafx.h" 

#define SIZE 200 

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

FILE * ifp = NULL; 
int inputArray[SIZE]; 
int i, j; 
int c; 

ifp = fopen("testfile.txt", "r"); 

for (i = 0; i <= SIZE; ++i) 
    fscanf(ifp, "%d", &inputArray[i]); 
/*fscanf(ifp, "%d", */ 

for (i = 0; i <= SIZE; i++) 
    printf("%d", inputArray[i]); 
return 0; 


} 

Поэтому у меня есть файл, который имеет nnumbers в нем, как:

Код, как представляется, работает с получением чисел в массив, например 3 5 5 3 6 3 2 ... и т. Д. Но тогда размер массива равен 200. Таким образом, остальное пространство, не используемое в массиве, не просто пустое. У этого есть огромные, странные цифры в нем , поэтому, когда я распечатываю его, он печатает 35536326411 -858993460 -858993460 он печатает это -858993460 на то, что я предполагаю, примерно 200 раз.

Я полный noob в C и в программировании. Я спросил профессора о размере массива, и он сказал, просто установил его на большое количество, например, 100 или 200, потому что попытка установить размер массива переменной, которая может быть изменена (или что-то в этом смысле), усложняет и isn ' t на нашем уровне.

Мне нужно сделать математику с этими числами, и я не хочу включать эти -858993460 вещи в мои расчеты. Как определить, где в массиве последний элемент, который был фактически объявлен? Кто-то пожалуйста мне точку в правильном направлении ...

ответ

1
for (i = 0; i <= SIZE; ++i) 

должен быть

for (i = 0; i < SIZE; ++i) 

Else у вас есть массив из связанного доступа, который приведет к непредсказуемому поведению.

for (i = 0; i < SIZE; ++i) 
{ 
    if(fscanf(ifp, "%d", &inputArray[i]) != 1) 
    break; 
} 

Установите все элементы на 0, используя

memset(array,0,sizeof(array)); 
+0

Спасибо за совет :) – bhroask

+0

О, но наш профессор действительно не нравится использовать перерывы в нашем кодирования .... – bhroask

+0

Будет ли какой-либо другой способ, который приносит такой же результат? – bhroask

0

Вы можете проверить возвращаемое значение fscanf() и когда он возвращается отказ [вернуться !=1], вы должны больше остановить сканирование.

Кроме того, вы можете использовать это значение i-1 для печати действует элементов.

Кроме того, вы должны изменить свой предел цикла на i < SIZE, чтобы избежать ошибки.

Затем вы можете инициализировать локальные переменные, чтобы избежать наличия значений мусора. Вы можете использовать memeset() или списки инициализаторов, чтобы получить эту часть.

0

Не определяйте РАЗМЕР, превращайте его в переменную, которая будет содержать действительное количество чисел в файле после чтения.

size_t SIZE = 0; 
for (SIZE = 0; ; ++SIZE) 
{ 
    if (fscanf(ifp, "%d", &inputArray[i]) == EOF) 
     break; 
}