2009-11-13 8 views
1

첫 번째로 가난한 언어에 대해 유감스럽게 생각합니다. 저는 VC++ Express를 사용하고 있습니다.2 차원 배치 연습

지금 준비에 대해 공부하고 있습니다. 그 책은 나에게 이렇게 프로젝트를 주었다 :

  • 5x5 행렬을 만든다.
  • 각 열은 각 행은 학생 (같은, 그 중 4)
  • 각 셀은 점수를 저장하기위한 것입니다 명 (그 중 4)
  • 입니다.
  • 각 행/열의 끝에서 행/열을 합합니다.

alt text http://img2.dcinside.com/viewGimage.php?no=2abcdc2aead569e96abec2b447826b2e8a31ed2bd95886ec8f7114dea41c5e0b50a950ba41f8c050e72c590e2df7750ec3b6ad8afa0bf7f7de8c653d99d03a

그리고 이것은 내 대답 프로그램입니다 :이 코드가 작동하지 않는 이유는 완전히 모르는

int main(void) 
{ 
int arr[5][5]; 
int i,j; 

while(1) 
{ 
    printf("student: 1.Jim,2.Jombi,3.Joly,4.Moran if you done, type 0\n"); 
    scanf("%d", &i); 

    if(i=0) 
     break; 

    printf("subject: 1.english,2.spanish,3.poolish,4.flash\n"); 
    scanf("%d", &j); 

    printf("insult score!\n"); 
    scanf("%d", arr[i-1][j-1]);//insulting score 
} 

for(i=0;i<4;i++)//initialization of sum parts 
{ 
    arr[i][4]=0; 
    arr[4][i]=0; 
} 

for(i=0;i<4;i++) 
    for(j=0;j<4;j++) 
     arr[4][i]+=arr[j][i]; 

for(i=0;i<4;i++) 
    for(j=0;j<4;j++) 
     arr[i][4]+=arr[i][j]; 


for(i=0;i<5;i++) 
{ 
    for(j=0;j<5;j++) 
     printf("%d ",arr[i][j]);//printing result 
    printf("\n"); 
} 
return 0; 
} 

. "while"부분 만 시도했을 때도 작동하지 않았습니다. 왜 이런거야?

+0

'#include '이 필요합니다. – pmg

+0

물론 다음과 같이했다 : D ty – Rhee

+0

힌트 : 프로그램에서 공백 사용을 개선하려고한다. for (i = 0; i <4; i ++) i ++)'또는'for (i = 0; i <4; 나는 중간 손가락을 사용하는 경향이 있는데 왜냐하면 손가락 두뇌가 너무 빨라서 마지막 뇌를 사용하도록 강요하기 때문입니다. – pmg

답변

2

, 당신은 if 잘못

if (i == 0) 
/* ^^^ */ 

이 그리고, 당신은 잘못된 scanf 너무

scanf("%d", &arr[i-1][j-1]); 
/*   ^^^ */ 

그리고 당신은 정말, 정말, 가 정말이 배열을 초기화 갈까요 무언가 (0이 될 수도 있음)

int arr[5][5] = {0}; 
+1

int arr [5] [5] = {0}; 이 코드는 전체 행렬을 0으로 초기화 할 수 있습니까? – Rhee

+0

오, 내가 지적한 두 번째 물건은 내 실수 였어. 이제 작동합니다! 고마워! – Rhee

+0

이것은 stdio.h 및 main() (모두 가정)과 함께 내가 찾은 모든 것을 가지고 있습니다. 나도 {0} 초기화에 대해 몰랐다. 나는 memset 또는 단순히 반복을 통해 갔을 것이다. –

1
if(i=0) 

이 문제의 원인 인 경우 나도 몰라,하지만이 있어야한다 : 당신의 마지막 for 루프에서

if(i==0) 
+0

hm.나는 당신의 answar를 보았던 직후에 노력했다. 그러나 아직도, 그것은 전체 배열을 인쇄하기 위해 단지 – Rhee

0

지수는 일회성이다. 4이어야하며 5을 사용합니다.

+0

을 움직이지 않는다. hm .. arr [0] [0] ~ arr [4] [4] – Rhee

+0

하지만 종료 조건으로'i <4'가 있으므로'i == 4'에 대한 루프는 실행되지 않습니다. . 당신은'i <5' 또는'i <= 4'를 사용할 수 있습니다 –

+0

두 종류의 'for'parts가 있다고 생각합니다 하나의 데이터를 모욕하기 위해 - 저는 단지 arr [0] [0] ~ arr [3] [3] 및 2 - 인쇄 전체 데이터 - 경우 arr [0] [0] arr [4] [4] – Rhee

0

점 몇 :

  • 대신 배열의 정수를 전달할 수 있습니다, 그래서 당신은 당신의 scanf() 전화에 & (주소의) 연산자를 놓치고있어.
  • 입력 루프 앞에 단순한 memset(arr, 0, sizeof arr);을 사용하여 합계를 제로화하는 중첩 된 for 대신 배열이 선명한 지 확인하십시오. 더 안전하고 짧으며 이해하기 쉽습니다.
  • 입력 단계 후에 행렬을 인쇄하는 것과 같은 도구를 추가하여 올바르게 표시되는지 확인하십시오. 지적 한 바와 같이
+0

견적 "memset (arr, 0, sizeof arr);" memset (matrixname, 초기화, sizeof arr 행렬)을 의미합니까? 이 부분을 시도해야합니다. 고마워! – Rhee