프린이
43
2018-01-12 22:16:38 작성 2018-01-12 22:30:09 수정됨
3
277

c언어 기초 질문 있습니다


문자를 입력 받아서 입력받은 정수를 아스키코드를 기반으로 해서 숫자로 바꿔 출력하는걸 만들려고 합니다. 하지만 원래는 97이 나와야하지만 계속 -52가 나옵니다. 주석 처리 되어있는 부분은 하면 97이 제대로 나옵니다. 왜 -52가 나오는 건가요???

제가 지금 공부하고 있는 서적은 '윤성우 열혈 C 프로그래밍' 이고,

현재 쓰는 프로그램은 visual studio 2017입니다.

#include <stdio.h>

int main() {

char ch1;

printf("문자를 입력하시오 ");

scanf_s("%d",&ch1);

printf("그 문자는 %d이다\n",ch1);

return 0;

/*char a='a';

printf("%d\n", a);*/

}

출력 결과 

문자를 입력하시오 a

그 문자는 -52이다

계속하려면 아무 키나 누르십시오 . . .


0
0
  • 답변 3

  • hiver
    24
    2018-01-12 23:39:02
    정수를 아스키코드 기반으로 숫자로 바꾼다는게?
    0
  • hiver
    24
    2018-01-12 23:41:03
    아래 예문까지 보니 입력받은 문자를 아스키코드에 응하는 숫자로 바꾸는 것같은데 scanf에다가는 정수를 입력받겠다고 서식문자를 넣어놨으니 이상한 값이 나오죠 %d가 아닌 %c로 바꾸시면 됩니다.
    0
  • 코리
    57
    2018-01-13 03:42:34

    VS 2017로 빌들하면 이렇게 워닝이 발생합니다.


    1>hello.c(9): warning C4477: 'scanf_s' : format string '%d' requires an argument of type 'int *', but variadic argument 1 has type 'char *'

    %d는 int *를 요구하지만 인자는 char *이다. 라고 나오네요. 스트링 처리할때나 &a같은 포인터 주소 처리할때는 워닝을 특히 잘봐야 합니다.


    그리고 scanf_s는 length 도 들어가야 합니다.

    => scanf_s("input:%c", &ch1, sizeof(ch1));

    https://msdn.microsoft.com/en-us/library/w40768et.aspx

    여기 참고해보세요.


    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.