2017-02-12 1 views
-2

파일에서 숫자를 읽고 배열에 넣고 싶습니다. 문제은 숫자가 올바르게 추출되었지만 은 배열에 저장할 수 없습니다. 프로그램이 실행 된 후에 배열이 비어 있음을 의미합니다. 나는이 코드가 쓰레드에 의해 사용된다는 것을 언급해야한다. 루프에서C의 파일에서 추출한 번호로 배열 채우기

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); 

} 
+3

'주문 [K] = K (do/while하고 파일에 너무 많은 값에 대한 보호 기능을 사용하여) '이 무엇을 생각합니까? – stark

+2

당신은'ordercount'를 사용하지 않고 배열의 무작위 위치에 항목을 저장합니다 ... –

+0

@stark : 응답 해 주셔서 감사합니다. 다른 것을 쓰고 싶습니다. – Reza

답변

2

당신이 정수 k에 저장된 값을 읽고 : 여기 코드 당신이 목록에 k를 할당하고 동일한 루프

fscanf (myfile, "%d", &k); 

ordercount++; 
    Order[k]=k; 

대신 ordercount (배열 액세스 BTW 전에 증가하기 때문에 1이 너무 큼)을 사용하는 경우 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])); 

+0

그래, 맞아, 문제는 배열이 채워지지 않을 것이다. 귀사의 솔루션이이 문제에 어떻게 도움이됩니까? – Reza

+0

어레이가 채워지지만 드문 드문, 연속적이지 않습니다. 수정 사항을 확인하십시오. –