본문

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

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


profile_image


(315557)
1 | 17 | 1115 | 비추력 43967
프로필 열기/닫기
글쓰기
|
목록 | 이전글 | 다음글

댓글 | 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 구분 제목 글쓴이 추천 조회 날짜
3 공지 [공지]프로그래밍 & 코딩 게시판 입니다. _ 식봉이는 식봉해 5 3177 2021.03.10
6880 질문 Joke8 1 492 2025.02.27
5715 잡담 루리웹-6431651489 1 662 2024.07.30
5542 잡담 앤드원 1 456 2024.07.07
5410 잡담 루리웹-9116069340 3 467 2024.06.21
4799 질문 세가좋어 1 804 2024.04.12
4666 질문 공돌이인생 1 510 2024.03.29
3165 잡담 루리웹-1970043849 1 512 2023.12.18
710 질문 질풍비장의패 2 983 2022.11.30
707 질문 루리웹-3648796984 1 1285 2022.11.23
691 잡담 루리웹-8641268934 3 1133 2022.08.07
685 잡담 루리웹-4247021526 3 1267 2022.07.25
647 잡담 루리웹-4746138650 1 1045 2022.06.01
631 질문 우너무너 1070 2022.05.14
527 질문 와이플 1 1123 2022.01.14
526 질문 와이플 1 1069 2022.01.13
525 질문 와이플 2 1232 2022.01.13
522 잡담 인민배우 심영 1 1243 2022.01.09
521 질문 인민배우 심영 1 1115 2022.01.08
518 질문 오잇스 1 1049 2022.01.05
514 질문 인민배우 심영 1 867 2022.01.02
513 질문 인민배우 심영 1 1142 2021.12.31
512 질문 인민배우 심영 1 1463 2021.12.30
511 잡담 인민배우 심영 2 1009 2021.12.27
509 잡담 salvare545 1 941 2021.12.27
508 강좌 _ 식봉이는 식봉해 5 2150 2021.12.27
507 질문 인민배우 심영 1 1058 2021.12.25
500 잡담 인민배우 심영 2 1243 2021.12.24
497 잡담 인민배우 심영 1 1245 2021.12.16
글쓰기 67개의 글이 있습니다.
1 2 3

게시판 매니저

X