C언어 질문입니다. 왜 안되는지 잘 모르겠습니다.
글쓴이: rhkdwls52 / 작성시간: 금, 2018/05/04 - 3:26오후
#include
#include
typedef struct
{
char root;
char lnode;
char rnode;
}Node;
int main(){
int num;
scanf_s("%d", &num); // 노드의 갯수 입력
Node *node =(Node*)malloc(num*sizeof(Node));
for (int i = 0; i < num; i++) {
scanf_s(" %c %c %c", &node[i].root, &node[i].lnode, &node[i].rnode);
}
printf("\nd\n");
for (int j = 0; j < num; j++) {
printf("%c %c %c", node[j].root, node[j].lnode, node[j].rnode);
printf("\n");
}
free(node);
return 0;
}
와 같이 작성하였습니다.
입력
2
A B C
D E F
출력
---------------------
A B
D E
와 같이 하였습니다.
왜 마지막 값이 안 나오는지 모르겠습니다.
환경은 Windows 10이며, visual studio 2017 을 이용하였습니다.
답변주시면 감사하겠습니다.
Forums:
수정하였습니다.
수정하였습니다.
어떤 입력을 넣었고, 어떤 출력을 기대했고, 어떤
어떤 입력을 넣었고, 어떤 출력을 기대했고, 어떤 출력이 나왔기에 "이상한 값"이라고 하시는지요?
일단 코드만 보기에는 딱히 문제될 만한 부분이 없어 보입니다. 다만 프로그래머의 의도를 알기는 어렵군요.
죄송합니다 제가 첫질문이라 미숙했습니다.
수정하였습니다. 의도는 단순히 구조체배열에 집어넣고 출력하는것입니다.
아하, 제가 scanf_s에 대해 잘못 알고 있었군요
아하, 제가
scanf_s
에 대해 잘못 알고 있었군요."%c"
format specifier를 사용할 때에도 size argument가 필요한 모양입니다.https://msdn.microsoft.com/en-us/library/6ttkkkhh.aspx
https://msdn.microsoft.com/en-us/library/w40768et.aspx
아래와 같이 바꾸면 잘 돌겠군요. 행간에 d는 왜 들어가는지 모르겠습니다만 일단..
정말 감사합니다.
제가 어리석었습니다.
감사합니다.
디버그를 해 보시기 바랍니다. 디버그를 해서
디버그를 해 보시기 바랍니다. 디버그를 해서 root, lnode, rnode 에 각각 어떤 값이 들어가 있는지 확인해 보시기 바랍니다. 아마 어떤 곳에 CR (carrage return) 이 대신 들어가 있을 것입니다.
그것은 scanf() 함수와 얽힌 고질적인 문제점입니다.
디버그를 하면 충분히 어떤 문제인지 파악할 수 있는 경우입니다. 어떻게 해결하는지 모르시겠다면 그때 질문을 하시면 됩니다.
원본 코드에 이미 방어가 되어 있습니다.
원본 코드에 이미 방어가 되어 있습니다.
참고해보시기 바랍니다.
보통 윈도우에서는 키입력을 받을 때. 3가지를 자주 사용합니다.
- WINAPI - WndProc() - KeyDown()
- MFC - PreTranslateMessage()
- GetAsyncKeyState()
//프로젝트 속성 - 일반 - 문자집합
- char : 멀티바이트 문자집합 MBCS - scanf(), putchar(), EOF, printf()
- wchar_t : 유니코드 문자집합 UNICODE - wscanf(), putwchar(), WEOF, wprintf()
- TCHAR : 멀티바이트와 유니코드에서 혼용
//유니코드에서의 사용방법
wchar_t wc;
int result = wscanf_s(L"%hc %lc", &c, 2, &wc, 1);
wprintf(L"The number of fields input is %d\n", result);
wprintf(L"The contents are: %C %c\n", c, wc);
wscanf_s(L"%hc%hc%hc", &node[i].root, 2, &node[i].lnode, 2, &node[i].rnode, 2);
wprintf(L"The contents are: %C %C %C\n", &node[i].root, &node[i].lnode, &node[i].rnode);
//scanf_s()가 앞에 있어서. 엔터를 치면. 출력이 잘못되는 경우. 임시 해결 방법
#include < conio.h >
int num;
scanf_s("%d", &num);
putchar(getchar());
scanf_s(" %c%c%c", &node[i].root, 1, &node[i].lnode, 1, &node[i].rnode, 1);
//지역 언어 설정
#include /* struct lconv, setlocale, localeconv */
setlocale(LC_ALL, "korean");
스트림 상태
https://msdn.microsoft.com/ko-kr/library/kb1at4by.aspx
상태 다이어그램은 대부분의 쓰기 및 읽기 작업에서 위치 함수 중 하나를 호출해야만 한다는 것을 보여줍니다.
•스트림의 마지막 작업이 쓰기이면 읽기 함수를 호출할 수 없습니다.
•스트림의 마지막 작업이 읽기이며, 읽기 작업이 파일 끝 지표를 설정하지 않는다면, 쓰기 함수를 호출할 수 없습니다.
stdin, stdout, stderr
https://msdn.microsoft.com/ko-kr/library/3x292kth.aspx
putchar, putwchar
https://msdn.microsoft.com/ko-kr/library/48szs1c2.aspx
반환 값
--------------------------------------------------------------------------------
기록 된 문자를 반환 합니다.
오류 또는 파일 끝 조건을 나타내기 위해 putc 및 putchar 반환 EOF;
putwc and putwchar return WEOF. 모든&4; 개의 루틴에 대 한 사용 ferror
또는 feof 오류 또는 파일의 끝에 대 한 확인 합니다. Null 포인터에 전달 되 면 stream,
이러한 함수에 설명 된 대로 잘못 된 매개 변수 예외를 생성할 매개 변수 유효성 검사합니다.
실행을 계속 하도록 허용 된 경우 반환 EOF 또는 WEOF 설정 errno 를 EINVAL합니다.
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
https://msdn.microsoft.com/ko-kr/library/w40768et.aspx
putchar와 putch에 관해 질문드립니다.
https://kldp.org/node/143110
[Embedded] getchar() buffer flushing 관련 문제
https://kldp.org/node/153933
GetKeyState();
GetAsyncKeyState();
initTermios() tcgetattr() getch() getchar() PeekConsoleInput() kbhit() ioctl() conio.h
//
일반 텍스트 매핑 사용
https://msdn.microsoft.com/ko-kr/library/7dzey6h6.aspx
샘플 일반 텍스트 프로그램
https://msdn.microsoft.com/ko-kr/library/4t912wf5.aspx
상수 및 전역 변수 매핑
https://msdn.microsoft.com/ko-kr/library/z94kex77.aspx
데이터 형식 매핑
https://msdn.microsoft.com/ko-kr/library/se784sk6.aspx
루틴 매핑
https://msdn.microsoft.com/ko-kr/library/tsbaswba.aspx
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
...
UTF-8 을 ANSI 로 출력하는 예제 - 구름 IDE
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=278&MAEULNO=20&no=32422&page=1
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기