배열의 값이 자동으로 변경되는 문제 발생
글쓴이: 익명 사용자 / 작성시간: 수, 2017/02/22 - 6:59오전
c_num에 값을 넣고, u_num에 입력을 받으면 c_num의 데이터 값들이 000으로 변경됩니다.
왜그러는 걸까요? 그리고 변경이 안되게 하려면 어떻게 해야하나요??
7 #include <stdio.h> 8 #include <stdlib.h> 9 10 11 int user_input(char user_number[]) 12 { 13 scanf("%d %d %d", &user_number[0], &user_number[1], &user_number[2]); 14 return 0; 15 } 16 17 int main() 18 { 19 char c_num[3] ; 20 char u_num[3]; 21 // c_num[0] = 1; 22 // c_num[1] = 2; 23 // c_num[2] = 3; 24 25 printf("%d\n",&c_num[0]); 26 printf("%d\n",&c_num[1]); 27 printf("%d\n",&c_num[2]); 28 29 30 //사용자 입력 31 user_input(u_num); 32 33 printf("%d\n",&c_num[0]); 34 printf("%d\n",&c_num[1]); 35 printf("%d\n",&c_num[2]); 36 return 0; 37 }
Forums:
디버깅해서 확인해보세요.
1. scanf() 함수에 용도. 인자값. 리턴값. 오류값을 네이버. 구글. MSDN. 책.등에서 확인해보세요.
%d 는 int 형을 입력받습니다. (4바이트) 64비트에서도 같습니다.
%c 는 char 형을 입력받습니다. (1바이트) 8bit = 0~255 = -128 ~ +127 의 범위를 가질겁니다.
http://dntkrl79.blog.me/220911725265
sizeof() 로 변수 크기를 확인하 실 수 있습니다.
32비트와 64비트의 다른점은 주소(Address)의 크기입니다.
%c로 입력 받으려면 1개의 문자를 입력 받을 수 있으므로. char배열의 크기를 문자열로 늘리거나.
%d로 숫자를 입력 받으셔야 합니다.
입력받은 숫자 데이터를 명시적 형변환 (char)을 사용해서 변환해 줍니다.
(char)를 사용하지 않는다면. 묵시적 형변환이 일어나게 됩니다.
데이터의 크기 만큼만. 변수에 할당되게 됩니다. 넘치는 값은 사라지게 됩니다.
각 변수에 주소와 값'을 모두 확인해 보시기 바랍니다.
Visual C++에서는 F9 F5 F10으로 확인이 가능합니다.
학원. 직업학교. 사이버 강의 OLC Centor. 책 동영상강의. 등에서도 배우실 수 있습니다.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
scanf() 연속된 데이터 입력을 받는데에는
scanf()는 연속된 데이터 입력을 받는데에는 적합하지 않습니다. 데이터를 입력하고 사용자가 CR(Carriage Return)를 넣게 되는데 그게 아직 입력 버퍼에 남아있기 때문입니다.
몇가지 해결책이 있는데 그중 생각나는 것만 적어보면
1) scanf(), fflush(STDIN)을 쓰기,, 즉 입력 받고 입력 버퍼를 비워버림. 하지만 VS에서만 사용가능하고 ANSI 표준이 아닌 단점이 있음
2) gets() 와 sscanf()을 섞어서 쓰기
3) getline() 과 sscanf()를 섞어서 쓰기 <-- C 언어라면 권장
4) cin 을 쓰기
댓글 달기