这是我到目前为止的代码:
#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;
}所以我有一个包含n个数字的文件,如下所示:
3.
5 5 3
6
3 2 6 4 1 1
上面的代码似乎可以将数字放入一个类似于3 5 5 3 6 3 2...etc的数组中。但是,数组大小是200。因此,数组中未使用的其余空间不仅仅是空白。它有一个巨大的,奇怪的数字,所以当我打印它的时候,它打印35536326411 -858993460 -858993460,它打印-858993460,我假设是200次。
我在C和编程方面完全是个菜鸟。我问教授关于数组大小的问题,他说只需将其设置为一个大数字,比如100或200,因为尝试将数组的大小设置为一个可以更改的变量(或该概念的其他内容)是很复杂的,而且还不到我们的水平。
我需要用这些数字做数学运算,我不想在我的计算中包括这858993460个东西。我如何确定数组中最后一个被声明的元素在哪里?谁能给我指个正确的方向。
发布于 2015-02-11 20:40:34
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));发布于 2015-02-11 20:42:07
您可以检查fscanf()的返回值,一旦它返回失败返回!=1,您就应该停止扫描。
此外,还可以使用该i-1值打印有效元素。
此外,您应该将循环限制更改为i < SIZE,以避免off-by-one错误。
然后,您可以初始化局部变量,以避免它们具有无用的值。您可以使用memeset()或初始化器列表来完成这一部分。
发布于 2015-02-11 20:43:45
不要定义大小,让它成为一个变量,它将包含读取后文件中的实际数量。
size_t SIZE = 0;
for (SIZE = 0; ; ++SIZE)
{
if (fscanf(ifp, "%d", &inputArray[i]) == EOF)
break;
}https://stackoverflow.com/questions/28454602
复制相似问题