2014-11-10 5 views
0
#include <stdio.h> 
#include <conio.h> 
#include <stdlib.h> 


int main() 
{ 
    int ActChoice=0; 
    //do 
    //{ 
      printf("What Activity were you doing?"); 
      printf("\n1. Running"); 
      printf("\n2. Swimming"); 
      printf("\n3. Cycling"); 
      scanf("\n%d",ActChoice); 

      /*if(ActChoice == 1) 
      { 
       RunEdit(); 
      } 
      else if(ActChoice == 2) 
      { 
       SwimEdit(); 
      } 
      else if(ActChoice == 3) 
      { 
       CyclEdit(); 
      }*/ 

    //} 
    // while(1==1); 
    getch(); 
} 

여기에 원하는 기능을 선택하도록 설계된 매우 간단한 코드가 있지만,이 프로그램을 실행하면 "ActChoice"를 입력 한 후 충돌이 발생합니다.C 함수 프로그램이 작동하지 않습니다.

이 코드가 여기에있는 코드인지, 코드가 더 아래에 있는지 알 수 없습니다. 그러나 검사가 중단 된 것 같습니다.

편집 : 나는 & 잊고, 내가 scanf()가 입력 데이터를 저장하는 변수의 주소가 필요 scanf("\n%d",ActChoice);scanf("\n%d",&ActChoice);

답변

2

변경에 scanf("\n%d",ActChoice);

: scanf("\n%d",&ActChoice);

scanf() 변수에 대한 포인터를 기대하고있다.

2

변경 실제로 지체입니다.

자세한 내용은 scanf()의 매뉴얼 페이지를 확인하십시오.

2

귀하의 scanf 문은 다음과 같이해야합니다 : 당신은 & 누락

scanf("\n%d",&ActChoice); 

.

+0

나는 얼굴을 마주 쳤다. 나는 어리 석다. –

0

프로그램이 충돌하지 않습니다. 제공하는 입력을 저장할 위치를 알 수 없습니다. 문제를 해결하려면 scanf 문의 ActChoice 앞에 &을 추가하십시오. 귀하는 scanf 문은 다음과 같아야합니다

,

는 scanf ("\ n 개의 % d 개", & ActChoice);

+0

'프로그램이 충돌하지 않는다 '는 것은 무엇을 의미합니까? –

+0

@SouravGhosh 그는 자신의 질문에 자신의 프로그램이 충돌했다고 지정했습니다. 실제로 충돌이 끝나지는 않습니다.(나는 잘못한 경우에 C 형제가 나에게 정확하다.) –

+0

네, ** ** 충돌합니다. 이유는 프로세스가 액세스 할 수없는 메모리 영역에 액세스하려고합니다. HInt :'ActChoice = 0;' –

1

변경 scanf ("\ n % d", ActChoice); to scanf ("\ n % d", & ActChoice); 왜냐하면 scanf에 전송 된 값이 ActChoice의 주소이기 때문입니다. 두 번째 인수 (& ActChoice)는 입력 된 응답을 배치 할 변수를 지정합니다. 이 경우 응답은 변수 ActChoice와 연관된 메모리 위치에 배치됩니다.

1

주소가 필요하기 때문에 scanf를 통해 입력을받을 때 정수 변수 ActChoice 이름 앞에 앰퍼샌드가 필요합니다. 코드는 다음과 같아야합니다.

scanf("\n%d", &ActChoice); 
0

Scanf in c 프로그램은 데이터가 저장 될 주소를 필요로합니다. 귀하의 경우에는 당신이 준

scanf("\n%d",ActChoice); 

ActChoice = 0 그래서 scanf와 실제로 프로그램 메모리입니다 위치 제로에 값을 저장하려고합니다, 그래서 난 세그멘트 폴트로 이어질 것입니다. 이 동일한 프로그램은 프로그램 메모리가 데이터 메모리와 다른 하버드 아키텍처에서 작동 할 수 있습니다.

관련 문제