본문

글쓰기   목록 | 이전글 | 다음글

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


profile_image


(315557)
0 | 17 | 1025 | 비추력 43349
프로필 열기/닫기
글쓰기
|
목록 | 이전글 | 다음글

댓글 | 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
 댓글




목록 | 이전글 | 다음글
글쓰기
공지
스킨
ID 구분 제목 글쓴이 추천 조회 날짜
154 전체공지 서비스 점검 안내 8일 00시 ~ 05시 8[RULIWEB] 2025.07.04
3 공지 [공지]프로그래밍 & 코딩 게시판 입니다. _ 식봉이는 식봉해 4 2902 2021.03.10
6880 질문 Joke8 345 2025.02.27
5715 잡담 루리웹-6431651489 578 2024.07.30
5542 잡담 앤드원 375 2024.07.07
5410 잡담 루리웹-9116069340 2 406 2024.06.21
4799 질문 세가좋어 702 2024.04.12
4666 질문 공돌이인생 444 2024.03.29
3165 잡담 루리웹-1970043849 456 2023.12.18
710 질문 질풍비장의패 1 902 2022.11.30
707 질문 루리웹-3648796984 1182 2022.11.23
691 잡담 루리웹-8641268934 2 1024 2022.08.07
685 잡담 루리웹-4247021526 2 1169 2022.07.25
647 잡담 루리웹-4746138650 964 2022.06.01
631 질문 우너무너 987 2022.05.14
527 질문 와이플 1019 2022.01.14
526 질문 와이플 970 2022.01.13
525 질문 와이플 1 1149 2022.01.13
522 잡담 인민배우 심영 1147 2022.01.09
521 질문 인민배우 심영 1025 2022.01.08
518 질문 오잇스 948 2022.01.05
514 질문 인민배우 심영 799 2022.01.02
513 질문 인민배우 심영 1046 2021.12.31
512 질문 인민배우 심영 1353 2021.12.30
511 잡담 인민배우 심영 1 923 2021.12.27
509 잡담 salvare545 869 2021.12.27
508 강좌 _ 식봉이는 식봉해 4 1934 2021.12.27
507 질문 인민배우 심영 982 2021.12.25
500 잡담 인민배우 심영 1 1183 2021.12.24
497 잡담 인민배우 심영 1177 2021.12.16
글쓰기 67개의 글이 있습니다.
1 2 3

게시판 매니저

X