到目前为止,这是我的代码:
#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。我如何确定数组中实际声明的最后一个元素? 有人请指出我正确的方向......
答案 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;
}
使用
将所有元素设置为0memset(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;
}