본문

[질문] C에서 함수의 발동(?)시점과 조건 [17]




(315557)
작성일 프로필 열기/닫기
추천 | 조회 731 | 댓글수 17
글쓰기
|

댓글 | 17
1
 댓글


(IP보기클릭)58.126.***.***

프로그램 키자마자 인거 같습니다
22.01.08 22:11

(IP보기클릭)58.126.***.***

모리노요루
추가로 달자면 c는 항상 위에서 아래로 내려갑니다 printf 가 나왔다는건 위 while 문이 다 실행되고 나서예요. | 22.01.08 22:14 | |

(IP보기클릭)1.236.***.***

K++을 하고 K가 10보다 작으면 K가 다시 0이되고 ++ 해봤자 다시 초기화 됩니다. 비교후 다른변수값으로 치환을 하는게 맞을거 같은데 정확히 뭘구현하려는지 알수가 없어서 답변은 이정도로 합니다.문자열을 받는건지;; 한글자를 어떻게 하려는건지;
22.01.08 22:12

(IP보기클릭)59.16.***.***

madcat_mk2
문자열 2개를 만들어서 기준 이하의 것은 버리고 기준 이상의 것만 저장하고 출력하려고 했는데 안되는거 하나씩 지우다 보니 결국 저기까지 왔네요. 답변 감사드립니다. | 22.01.08 22:32 | |

(IP보기클릭)121.134.***.***

이상한 부분: 1) void main <--> return 0 // void는 return이 없음. int로 변경 2) if k<10 k<=0 // 한줄씩 따라가보시면 k++ 직후에 0으로 초기화해서 사실상 무한루프 3) 들여쓰기 규칙을 지켜봄 직. 4) 코드가 의도와 맞지 않음. getchar 예제를 구해서 한줄씩 따라가본 뒤, 의도대로 하나씩 수정해보는 접근이 좋을 듯
22.01.08 22:28

(IP보기클릭)59.16.***.***

BlackAn
답변 감사드립니다. 예제를 더 파봐야 겠네요 | 22.01.08 22:31 | |

(IP보기클릭)121.134.***.***

인민배우 심영
#include <stdio.h> #include <string.h> int main(){ char c; while((c=getchar())!=EOF){ printf("%c,", c); } return 0; } 이걸로 시작해보시는 것도 좋겠네요. | 22.01.08 22:35 | |

(IP보기클릭)141.164.***.***

코드에 여러가지 부분이 문제있을수도 있습니다. 1. void 리턴값의 함수에서 return 0; 는 하시면 안됩니다. (컴파일링은 될수 있어도 위험한 프로그램이 될수 있습니다) 2. k++; if (k<10) { k=0;} 을 하시면 k값이 0으로 고정되게 됩니다. 즉 s[0]에 c값을 계속 overwrite하시고 있습니다. 3. c=getchar() 에서 터미널에서 인풋을 하면 c가 EOF로 세팅이 안되서 무한루프에 빠질수도 있습니다. https://www.cplusplus.com/reference/cstdio/getchar/ 여기를 참조하시면 EOF가 세팅된 스텐다드인풋이나 에러가 날때만 EOF가 세팅되게된다고 합니다. 4. 인풋이 여러번있을시에 s[1000] 버퍼를 재사용하시면 null character 값이 제대로 세팅이 되지 않아 printf("%s", s) 하실때 문제가 생길수 있습니다.
22.01.08 22:36

(IP보기클릭)141.164.***.***

프미곰
IDE 사용중이시면 디버그모드로 라인 바이 라인 디버깅해보시는걸 꼭 추천드립니다. 프로그래밍 실력향상에 많은 도움 되실겁니다. 리눅스 환경에서 컴파일하시는거면 gdb를 사용하시면 좋습니다. | 22.01.08 22:40 | |

(IP보기클릭)141.164.***.***

프미곰
getchar발동 시점을 말씀드리면 프로그램이 위 라인부터 실행되고 getchar라인으로 가면 실행됩니다. getchar 함수가 콜되면, stdin 버퍼에서 입력이 있을때까지 대기합니다. stdin 버퍼에 어떤 입력이 있으면 다음라인이 실행됩니다. getchar은 버퍼에서 1바이트씩 입력을 받기 때문에 입력했던 문자열 길이 + 1 (다음라인문자열) 만큼 돌게되어있습니다. | 22.01.08 22:47 | |

(IP보기클릭)59.16.***.***

프미곰
아. main도 함수이기 때문에 꼭 리턴을 해주는게 좋다라고 만 알고 있었는데 void랑 같이 하면 오히려 않좋군요. void를 int로 바꾸던지 아니면 리턴을 빼던지...까다롭기가 무슨 며느리 장맛보는 시어머니 수준이네요.. 답변 감사드립니다. | 22.01.08 22:49 | |

(IP보기클릭)59.12.***.***

"일정 갯수 이하의 문자는 출력하지 않는 코드"를 구현하시려면, if문을 while문 안에 넣는게 아니라 출력문에 넣으셔야 합니다. if (k>= 10) { print(%s\n%d", s, k); } 이런 식으로, 받은 문자 수 (k) 가 10을 넘어야 문자를 출력하도록 하면 됩니다. 추가로, 첫 번째 코드의 if문 조건은 k >= 10 이 아니라 k < 10으로 되어 있으므로, 10이 넘었을 때 0으로 초기화되는 코드가 아니라 적으면 초기화되는 코드입니다. 시작이 0이므로, 위 코드는 항상 k = 0으로 초기화되는 중입니다. getchar는 while문의 조건 안에 들어가 있는데, while문의 조건은 while문 진입 시에 항상 처리됩니다. 첫번째 스크린샷의 코드는 다음과 같은 과정을 거칩니다. 1. 각종 변수 초기화 (c=0. k=0. n=0) 2. while문 진입, 조건 체크 -> 2-1. c=getchar(); 2-2. c == EOF? 아니므로 다음으로 3. while문 body 실행(s[k]=c; k++; if(k<10){k=0} 4. 2번으로 되돌아감. while문 조건 체크 -> 4-1. c=gechar(); 4-2. c == EOF? EOF 받았으면 while문 탈출 5. print(~~~) 6. return 0;
22.01.08 22:41

(IP보기클릭)59.16.***.***

편안한 집
감사드립니다. 다시한번 해봐야 겠네요. | 22.01.08 22:50 | |

(IP보기클릭)1.235.***.***

while은 그냥 무한 돌리고 그 안에서 c 값이 eof일 때 break 시키는게 맞을 것 같네요. while문이 c값을 체크하는게 아니라 함수의 결과를 eof와 체크하는 것 같네요. while문에서 if문은 잘 수행됩니다.
22.01.08 22:44

(IP보기클릭)1.235.***.***

루리웹-3872261902
void는 return값 필요없습니다. 그리고 오버플로우를 예방하려면 k값 초과도 break 시키는게 좋겠네요 | 22.01.08 22:47 | |

(IP보기클릭)59.16.***.***

루리웹-3872261902
감사드립니다. 몇 줄 안되는 코드라고 제가 너무 안이하게 접근했네요 | 22.01.08 22:51 | |

(IP보기클릭)210.107.***.***

발동 시점이라 하니까 유희왕 같네요
22.02.18 10:19


1
 댓글





읽을거리
[PS5] 국산 게임의 별로서 기억될 칼, 스텔라 블레이드 (85)
[MULTI] 탐험으로 가득한 사막과 맛있는 메카 전투, 샌드랜드 (19)
[MULTI] 아쉬움 남긴 과거에 보내는 마침표, 백영웅전 리뷰 (44)
[MULTI] 고전 명작 호러의 아쉬운 귀환, 얼론 인 더 다크 리메이크 (17)
[게임툰] 자신만의 용을 찾는 여행, 드래곤즈 도그마 2 (50)
[게임툰] 공주의 변신은 무죄, 프린세스 피치 Showtime! (34)
[NS] 창세기전: 회색의 잔영, 기념사업의 끝 (157)
[MULTI] 개발 편의적 발상이 모든 것을 쥐고 비틀고 흔든다, 별이되어라2 (88)
[NS] 여아들을 위한 감성 영웅담, 프린세스 피치 Showtime! (49)
[게임툰] 해방군은 왜 여자 뿐이냐? 유니콘 오버로드 (126)
[MULTI] 진정한 코옵으로 돌아온 형제, 브라더스: 두 아들의 이야기 RE (12)
[MULTI] 모험의 과정이 각별한 경험으로 맺어질 때, 드래곤즈 도그마 2 (52)



글쓰기
공지
스킨
ID 구분 제목 글쓴이 추천 조회 날짜
118 전체공지 업데이트 내역 / 버튜버 방송 일정 8[RULIWEB] 2023.08.08
143 공지 게시판 이용자 프로그래밍 언어 설문 조사! (2차 설문 20/04/30~... (3) _ 식봉이는 식봉해 3 1495 2021.03.24
3 공지 [공지]프로그래밍 & 코딩 게시판 입니다. _ 식봉이는 식봉해 4 1928 2021.03.10
4799 질문 세가좋어 298 2024.04.12
4666 질문 공돌이인생 105 2024.03.29
3165 잡담 루리웹-1970043849 208 2023.12.18
710 질문 질풍비장의패 1 589 2022.11.30
707 질문 루리웹-3648796984 781 2022.11.23
691 잡담 루리웹-8641268934 2 709 2022.08.07
685 잡담 루리웹-4247021526 2 747 2022.07.25
647 잡담 루리웹-4746138650 682 2022.06.01
637 질문 키라 요시카게 1 743 2022.05.24
631 질문 우너무너 668 2022.05.14
597 질문 키라 요시카게 654 2022.04.03
527 질문 와이플 652 2022.01.14
526 질문 와이플 677 2022.01.13
525 질문 와이플 1 823 2022.01.13
522 잡담 인민배우 심영 879 2022.01.09
521 질문 인민배우 심영 731 2022.01.08
518 질문 오잇스 647 2022.01.05
514 질문 인민배우 심영 544 2022.01.02
513 질문 인민배우 심영 668 2021.12.31
512 질문 인민배우 심영 1034 2021.12.30
511 잡담 인민배우 심영 1 655 2021.12.27
509 잡담 salvare545 613 2021.12.27
508 강좌 _ 식봉이는 식봉해 4 1175 2021.12.27
507 질문 인민배우 심영 705 2021.12.25
500 잡담 인민배우 심영 1 814 2021.12.24
497 잡담 인민배우 심영 919 2021.12.16
495 질문 V1046R-MAHORO 1 510 2021.12.14
491 질문 인민배우 심영 715 2021.12.10
글쓰기 69개의 글이 있습니다.
1 2 3
게시판 매니저
X