我想从文件中读取数字并将它们放入数组中。 问题是,虽然数字提取正确,但无法保存到数组。这意味着在执行程序后数组为空。我应该提一下这个代码是由一个线程使用的。 这是代码:
int ordercount=0;
//initialize
int Order[10]={0};
int Credit[10]={50,50,50,50,50,50,50,50,50,50};
//For reading a file
FILE *myfile;
//Semaphore
pthread_mutex_t mtx;
char char_get;
void *orders(void *arg)
{
///////////////////////////////////////////read from a file
myfile=fopen("List.txt","r+");
int k=0;
//pthread_mutex_lock(&mtx);
fscanf (myfile, "%d", &k);
while (!feof (myfile))
{
ordercount++;
Order[k]=k;
printf("The initial Order is: %d \n",Order[k]);
fscanf (myfile, "%d", &k);
}
fclose (myfile);
//pthread_mutex_unlock(&mtx);
}
答案 0 :(得分:2)
在你的循环中,您正在读取k
中存储的整数值:
fscanf (myfile, "%d", &k);
在同一个循环中,您将k
分配到列表
ordercount++;
Order[k]=k;
但不是使用ordercount
(由于它在数组访问BTW之前递增,因为它太高了),您使用k
作为索引。
如果值大于10,则在Order
保留内存之外存储数据:未定义的行为。
(请注意,您的printf("The initial Order is: %d \n",Order[k]);
语句似乎有效,因为它在作业完成后就没有了,并且它没有显示您存储k
的顺序:您有这样的错觉:连续存储,而不是)
我会像这样改写:
// don't perform the initial fscanf, do/while avoids that
do
{
if (fscanf (myfile, "%d", &k)!=1)
{
printf("parsing error\n"); // maybe should exit if error?
}
printf("The initial Order is: %d @ %d \n",k,ordercount);
Order[ordercount++]=k; // filling with values with increasing index, not random
}
while (!feof (myfile) || ordercount==sizeof(Order)/sizeof(Order[0]));
(使用do/while
并防止文件中包含过多的值)