将一定数量的元素放入数组中

时间:2015-02-11 12:39:52

标签: c arrays int

到目前为止,这是我的代码:

#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 6 4 1 1

上面的代码似乎可以将数字转换成数组,如3 5 5 3 6 3 2 ...等。 但是,数组大小为200.因此数组中未使用的其余空间不是空白。它有一个巨大的,奇怪的数字 所以当我把它打印出来时,它会打印出来 35536326411 -858993460 -858993460 它将-858993460打印到我假设的约200次。

我是C和编程中的总菜鸟。我问教授有关数组大小的问题,他说只需将其设置为100或200这样的大数,因为尝试将数组的大小设置为可以更改的变量(或者某个概念)变得复杂并且不是# 39;在我们的水平还没有。

我需要使用这些数字进行数学计算,并且我不想在计算中包含这些数字.858993460。我如何确定数组中实际声明的最后一个元素? 有人请指出我正确的方向......

3 个答案:

答案 0 :(得分:1)

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

应该是

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

否则你有数组越界访问,这将导致未定义的行为。

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

使用

将所有元素设置为0
memset(array,0,sizeof(array));

答案 1 :(得分:0)

您可以检查fscanf()的返回值,一旦它返回失败[return !=1],您就应该停止扫描了。

此外,您可以使用i-1值来打印有效元素。

此外,您应将循环限制更改为i < SIZE,以避免出现一个错误。

然后,您可以初始化局部变量以避免它们具有垃圾值。您可以使用memeset()或初始化列表来完成该部分。

答案 2 :(得分:0)

不要定义SIZE,使其成为一个变量,在读取后将包含文件中的实际数字。

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