playXP

서브 메뉴

Page. 1 / 12509 [내 메뉴에 추가]
글쓰기
작성자 아이콘 TwilighT_
작성일 2016-02-16 22:01:55 KST 조회 496
제목
C언어 관련.

대학가기전에 C언어 조금은 알고가자

라는 마인드로 공부해보고 있는데

약간 개념상 혼란이 와서..

 

 

scanf("%c", &변수명); 후 변수명을 printf하게 한 뒤에

실행시켜서 1자 이상을 치게 되면

예를들어 ABC를 치게되면 A만 나오고 BC그리고 엔터키까지 지워?지는게 아니라 다음명령으로 넘어가더군요

 

질문1) int로 선언된 변수에 scanf해서 한글을 치면 넘어가는게 아니네요? int에 문자가 들어와도 수로 처리되고 다음명령으로 안넘어가나요?

 

질문2) 위에 말씀 드린 것과 같이

scanf("%c", &변수명);​과 printf를 3번반복하면

처음 ABC를 쳤을경우

A

B

C

이렇게 나오는데

AB엔터를치면

A

B

엔터

 

이렇게 엔터까지 적용이 되더라구요 문자로. 원래 그런게 당연한건가요?

 

 

어우...최대한 잘 적어보려고 했는데 좀 이상하긴한데..죄송합니다

답변이 올지는 모르겠네요ㅜㅜㅜㅜ

 

 

지속적인 허위 신고시 신고자가 제재를 받을 수 있습니다.
신고 사유를 입력하십시오:

발도장 찍기
아이콘 CF_Crusader (2016-02-16 22:21:11 KST)
0↑ ↓0
센스 이미지
1. 이해가 잘 안됩니다. int에 문자를 넣고 싶다는 건가요? 아니면 int에 강제로 문자를 넣었을 때에 어떤 현상이 벌어져야 정상인지 알고 싶으신건가요
2. 보통 그거 때문에 fflush(stdin)을 scanf 다음 줄에 박아 넣어서 최초 입력한 하나만 적용되고 나머지는 없애버리는 경우가 많습니다.
포더윈터 (2016-02-16 22:29:10 KST)
0↑ ↓0
센스 이미지
"%c"는 문자 하나를 받는거라서 ABC 치면 BC가 짤립니다
"%s"로 하신다음 char 변수명[255];같이 선언하시고 &변수명이 아니라 그냥 변수명 넣고 하세요

char var[255];
scanf("%s",var);
포더윈터 (2016-02-16 22:31:54 KST)
0↑ ↓0
센스 이미지
여기서 int i나 char ch는 입력받을때 scanf("%d",&i); scanf("%c",&ch);인데
배열을 입력받을땐 &를 안 붙이고 변수명만 쓰나요?

라는 질문이 나올 수 있는데 이제 포인터, 함수, 콜바이벨류 콜바이레퍼런스를 알아야 설명이 가능한 부분이니 지금은 외워서 활용하시면 되겠습니다. 참고로 출력 형태는 printf("%s",var);입니다
아이콘 OvO (2016-02-16 22:40:01 KST)
0↑ ↓0
센스 이미지
너무 많은 걸 알려주고 있다구
아이콘 TwilighT_ (2016-02-16 22:45:56 KST)
0↑ ↓0
센스 이미지
엣 너무 늦게 봤네요ㅠㅠ 죄송합니다ㅠㅠ
CF_Crusader//int에 강제로 문자를 넣었을 때에 왜 "%c"처럼 하나만 남고 넘겨지는게 아니라 먹어?버리는지...int는 숫자만 받는데 문자를 넣어버리면 안되는걸로 처리되는게 맞지 않나요?
2번 관련해서는 감사합니다! 더 배워야하겠네요ㅠㅠ 아직 모르는 부분이였군요ㅜ

포더윈터//
char var[255];
scanf("%s",var);
같은경우에는 문자열을 받는거기에 한자만 받고 싶을 때 가능한 방법은 아닌거죠? getch();를 써야하겠죠?

아니면 치면 0부터 224까지 나누어 들어가는거고 배열한칸?씩 빼오는 방법을 사용하라는 말씀이신가요?
printf("%s",var);가 아닌 var인가요?
포더윈터 (2016-02-16 22:57:32 KST)
0↑ ↓0
센스 이미지
1) scanf는 입력을 받으면서 이게 int형이다, 이게 char형이다라는 구분을 명확하게 하지 않습니다. 단지 주소값으로 읽어올 뿐이고 '%d %c같은 구분기호를 통해서 저장을 하는거져. 구분기호가 입력된 데이터 타입이 다르면 이상하게 읽혀져서 쓰레기값이 나오게 됩니다.

2)
char var;
scanf("%c",&var);
이케 하면 한 문자 받아오는겁니다. 뭐 입력방식에는 char() getch() getche() getchar() 등등등... 이런 형제들이 있는데 각자 동작이 다르니 필요한 방법으로 입력하면 됩니다

3)
char var[255];
scanf("%s",var);
이렇게 입력을 받고 aaaa를 입력했다 치면 var[0]부터 var[3]까지는 a가 입력되어있고, var[4]에 EOF문자 '\0' 가 들어가게 됩니다. for문으로 한 칸씩 출력해도 결과는 같아요

char var[255];
int i;
scanf("%s",var);
printf("%s\n",var); //이 줄이랑
for(i=0;var[i]!='\0';i++) printf("%c",var[i]); // 이 줄이랑 같게 동작함
포더윈터 (2016-02-16 23:00:04 KST)
0↑ ↓0
센스 이미지
아 이런 입출력 기본 중이신가요 for문이나 배열 안들어가셨나
그냥 그렇다고만 하고 넘어가시면 뒤에 다 의문이 풀리는 구조로 되어있습니다 그냥 넘어가세요 괜찮음
아이콘 STJ. (2016-02-16 23:04:08 KST)
0↑ ↓0
센스 이미지
c언어배울땐 그렇구나하고 익혀두시면 나중에 포인터배울때 모든걸 알게됩니다.
아이콘 TwilighT_ (2016-02-16 23:06:38 KST)
0↑ ↓0
센스 이미지
아 감사합니다! 배열이랑 for문은 알고 있었어요!
근데 %c같은 경우 맨앞자리 한자리만 가져?오는데 나머지는 다음 코드에 영향을 주게 넘겨버리던데
그...냥 그런거죠?? 설명엔 그런게 없었는데 만들다보니까 이상해서요..ㅠㅠㅠㅠ
포더윈터 (2016-02-16 23:08:03 KST)
0↑ ↓0
센스 이미지
그게 음... 입력 버퍼에 한 글자 받아오고 나머지가 남아서... scanf 입력버퍼 이케 쳐보시면 관련 자료가 좀 나올겁니다...
아이콘 불곰. (2016-02-16 23:17:29 KST)
0↑ ↓0
센스 이미지
c언어 학교 때 배우고 안해서 모르겠다...

자바면 array나 map 하나 선언해놓고 배열 크기만큼 for문 돌려서 입력받고 저장하고 출력하면 끝인데 ㅋ
아이콘 TwilighT_ (2016-02-16 23:19:35 KST)
0↑ ↓0
센스 이미지
아 감사합니다! 읽어볼께요!
정말정말 죄송한데 하나만요...ㅠㅠㅠ
이전 책들을 봐서 그런지 모르겠는데 scanf도 scanf_s로 써야하고 gets였나도 gets_s라고 써야한다던데
#pragma warning (disable : 4996)
이거 넣으면 된다해서 하고 있거든요...그냥 _s붙인다고 되는게 아닌거 같은데
처음에는 안붙이는걸로 해도 상관은 없나요? 나중에는 다 붙여서 사용해야 하나요?
아이콘 불곰. (2016-02-16 23:28:54 KST)
0↑ ↓0
센스 이미지
그 아마 scanf나 printf는 라이브러리라서 못바꾸는걸로 알고 있는데..

자바에서 system.out.println에 println도 system 클래스에 표준 출력 system.out으로 접근하게 만든거에요

아마 저것도 변경이 안되는걸로 알고 있는데 변경 할려면 내가 직접 라이브러리 바꿔야 되겠죠

변경이 되던가 ㅡ.ㅡ;
아이콘 CF_Crusader (2016-02-16 23:31:35 KST)
0↑ ↓0
센스 이미지
그냥쓰셔도 되긴 할건데
아마 경고정도만 뜨고 말거에요
scanf나 scanf_s나 하는 짓은 동일합니다. 보안문제였나 그런걸로 기억하는데 암튼 요즘꺼에는 언더바s붙인거 쓰라고 계속 그러긴 합니다.
아이콘 불곰. (2016-02-16 23:33:08 KST)
0↑ ↓0
센스 이미지
그런거 붙이는 것도 있나 ㄷㄷ 라이브러리 같은데 그게 된다니
아이콘 CF_Crusader (2016-02-16 23:35:02 KST)
0↑ ↓0
센스 이미지
포더윈터 (2016-02-16 23:36:43 KST)
0↑ ↓0
센스 이미지
나중엔 안써요 걍 scanf 쓰셈
아이콘 TwilighT_ (2016-02-16 23:58:20 KST)
0↑ ↓0
센스 이미지
감사합니다!!
댓글을 등록하려면 로그인 하셔야 합니다. 로그인 하시려면 [여기]를 클릭하십시오.
롤토체스 TFT - 롤체지지 LoLCHESS.GG
소환사의 협곡부터 칼바람, 우르프까지 - 포로지지 PORO.GG
배그 전적검색은 닥지지(DAK.GG)에서 가능합니다
  • (주)플레이엑스피
  • 대표: 윤석재
  • 사업자등록번호: 406-86-00726

© PlayXP Inc. All Rights Reserved.