묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
디자인 패턴 자바 문의
안녕하세요 좋은 강의 감사합니다!디자인 패턴은 JS로만 제공되는건가요?
-
미해결
공용계정 생성 문의
3명이서 하나의 계정으로 관리 및 강의결제 하려고 하는데 이용방법이 있을까요?
-
미해결Slack 클론 코딩[실시간 채팅 with React]
채널 생성시 channelData.map is not a function
채널생성 클릭하면 channeldata.map is not a function이라고 에러가 뜨는데channelData뿌려지는곳에 ?옵셔널도 줬고..아래처럼 잘 작성한것같은데 어딜 놓쳤는지 모르겠습니다.새로고침하면 추가된 채널명이 출력됩니다. workspaceimport fetcher from '@utils/fetcher'; import axios from 'axios'; import React, { FC, useCallback, useState } from 'react'; import { Navigate, useParams } from 'react-router-dom'; import useSWR from 'swr'; import { AddButton, Channels, Chats, Header, LogOutButton, MenuScroll, ProfileImg, ProfileModal, RightMenu, WorkspaceButton, WorkspaceModal, WorkspaceName, Workspaces, WorkspaceWrapper, } from './styles'; import gravatar from 'gravatar'; import Menu from '@components/menu'; import { Link } from 'react-router-dom'; import { IChannel, IUser, IWorkspace } from '@typings/db'; import { Button, Input, Label } from '@pages/signup/styles'; import useInput from '@hooks/useInput'; import Modal from '@components/modal'; import { toast } from 'react-toastify'; import CreateChannelModal from '@components/createChannelModal'; const Workspace: FC = ({ children }) => { const { workspace, channel } = useParams<{ workspace: string; channel: string }>(); const { data: userData, error, mutate } = useSWR<IUser | false>('/api/users', fetcher, { dedupingInterval: 2000 }); const { data: channelData } = useSWR<IChannel[]>(userData ? `/api/workspaces/${workspace}/channels` : null, fetcher); if (!userData) { return <Navigate to="/login" />; } const [showUserMenu, setShowUserMenu] = useState(false); const [newWorkspace, onChangeNewWorkspace, setNewWorkspace] = useInput(''); const [newUrl, onChangeNewUrl, setNewUrl] = useInput(''); const [showWorkspaceModal, setShowWorkspaceModal] = useState(false); const [showCreateChannelModal, setShowCreateChannelModal] = useState(false); const [showCreateWorkspaceModal, setShowCreateWorkspaceModal] = useState(false); //functions const onLogout = useCallback(() => { axios .post('/api/users/logout', null, { withCredentials: true, }) .then((res) => { mutate(res.data); }); }, []); const onClickUserProfile = useCallback(() => { setShowUserMenu(!showUserMenu); }, [showUserMenu]); const onClickCreateWorkspace = useCallback(() => { setShowCreateWorkspaceModal(true); }, []); const onCreateWorkspace = useCallback( (e) => { e.preventDefault(); if (!newWorkspace || !newWorkspace.trim()) return; if (!newUrl || !newUrl.trim()) return; //trim ->띄어쓰기 하나도 통과 돼버리는걸 막는다. axios .post( '/api/workspaces', { workspace: newWorkspace, url: newUrl, }, { withCredentials: true, }, ) .then((res) => { mutate(res.data); setShowCreateWorkspaceModal(false); setNewWorkspace(''), setNewUrl(''); }) .catch((err) => { console.dir(err); toast.error(error.response?.data, { position: 'bottom-center' }); }); }, [newWorkspace, newUrl], ); const onCloseModal = useCallback(() => { setShowCreateWorkspaceModal(false); setShowCreateChannelModal(false); }, []); const toggleWorkspaceModal = useCallback(() => { setShowWorkspaceModal(!showWorkspaceModal); }, [showWorkspaceModal]); const onClickAddChannel = useCallback(() => { setShowCreateChannelModal(true); }, []); return ( <div> <Header> <RightMenu> <span onClick={onClickUserProfile}> <ProfileImg src={gravatar.url(userData.email, { s: '28px', d: 'retro' })} alt={userData.nickname} /> {showUserMenu && ( <Menu style={{ right: 0, top: 38 }} onCloseModal={onClickUserProfile} show={showUserMenu}> <ProfileModal> <img src={gravatar.url(userData.email, { s: '28px', d: 'retro' })} alt={userData.nickname} /> <div> <span id="profile-name">{userData.nickname}</span> <span id="profile-active">Active</span> </div> </ProfileModal> <LogOutButton onClick={onLogout}>로그아웃</LogOutButton> </Menu> )} </span> </RightMenu> </Header> <WorkspaceWrapper> <Workspaces> {userData.Workspaces?.map((ws: IWorkspace) => { return ( <Link key={ws.id} to={`/workspace/${123}/channel/일반`}> <WorkspaceButton>{ws.name.slice(0, 1).toUpperCase()}</WorkspaceButton> </Link> ); })} <AddButton onClick={onClickCreateWorkspace}>+</AddButton> </Workspaces> <Channels> <WorkspaceName onClick={toggleWorkspaceModal}>Sleact</WorkspaceName> <MenuScroll> <Menu show={showWorkspaceModal} onCloseModal={toggleWorkspaceModal} style={{ top: 95, left: 80 }}> <WorkspaceModal> <h2>Sleact</h2> {/* <button onClick={onClickInviteWorkspace}>워크스페이스에 사용자 초대</button> */} <button onClick={onClickAddChannel}>채널 만들기</button> <button onClick={onLogout}>로그아웃</button> </WorkspaceModal> </Menu> {channelData?.map((v, idx) => ( <div key={idx}>{v.name}</div> ))} </MenuScroll> </Channels> <Chats> {children}</Chats> </WorkspaceWrapper> <Modal show={showCreateWorkspaceModal} onCloseModal={onCloseModal}> <form onSubmit={onCreateWorkspace}> <Label id="workspace-label"> <span>워크스페이스 이름</span> <Input id="workspace" value={newWorkspace} onChange={onChangeNewWorkspace} /> </Label> <Label id="workspace-url-label"> <span>워크스페이스 url</span> <Input id="workspace" value={newUrl} onChange={onChangeNewUrl} /> </Label> <Button type="submit">생성하기</Button> </form> </Modal> <CreateChannelModal show={showCreateChannelModal} onCloseModal={onCloseModal} setShowCreateChannelModal={setShowCreateChannelModal} /> </div> ); }; export default Workspace; createChannelModalimport Modal from '@components/modal'; import useInput from '@hooks/useInput'; import { Button, Input, Label } from '@pages/signup/styles'; import { IChannel, IUser } from '@typings/db'; import fetcher from '@utils/fetcher'; import axios from 'axios'; import React, { useCallback, VFC } from 'react'; import { useParams } from 'react-router-dom'; import { toast } from 'react-toastify'; import useSWR from 'swr'; interface Props { show: boolean; onCloseModal: () => void; setShowCreateChannelModal: (flag: boolean) => void; } const CreateChannelModal: VFC<Props> = ({ show, onCloseModal, setShowCreateChannelModal }) => { const [newChannel, onChangeNewChannel, setNewChannel] = useInput(''); const { workspace, channel } = useParams<{ workspace: string; channel: string }>(); const { data: userData } = useSWR<IUser | false>(`/api/users`, fetcher); const { data: channelData, mutate } = useSWR<IChannel[]>( userData ? `/api/workspaces/${workspace}/channels` : null, fetcher, ); const onCreateChannel = useCallback( (e) => { e.preventDefault(); axios .post( `/api/workspaces/${workspace}/channels`, { name: newChannel, }, { withCredentials: true }, ) .then((res) => { setShowCreateChannelModal(false); mutate(res.data); setNewChannel(''); }) .catch((err) => { console.dir(err); toast.error(err.response?.data, { position: 'bottom-center' }); }); }, [newChannel], ); return ( <Modal show={show} onCloseModal={onCloseModal}> <form onSubmit={onCreateChannel}> <Label id="channel-label"> <span>채널</span> <Input id="channel" value={newChannel} onChange={onChangeNewChannel} /> </Label> <Button type="submit">생성하기</Button> </form> </Modal> ); }; export default CreateChannelModal;
-
미해결HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 무료 강좌
가감속 테이블
안녕하세요 선생님PWM 주기 변경을 보고 가감속 테이블을 만들어서 테스트를 진행할려고 하는데 속도가 너무 빨라서 그런지 몰라서 점점 빨라지다가 동작이 멈춰버리는데 혹시 요령이나 방법을 알 수 있을까요?
-
해결됨비전공자를 위한 진짜 입문 올인원 개발 부트캠프
상품이 아래로 나열되요 ㅜ
똑같은 css파일인데 왜 다르게 나타날까요 ㅠㅠ위가 처음에 react없이 그냥 html로만 만든거구요아래가 react로 만든건데같은 index.css파일인데 왜 다르게 나타날까요 ㅠㅠ
-
미해결처음 만난 리액트(React)
작동이 안되네요....ㅠㅠ
Line 4:8: 'App' is defined but never used no-unused-vars이러한 내용으로 에러가 뜨고에러 라인 옆에 // eslint-disable-next-line << 주석도 달아봤는데 해결이 안됩니다..
-
미해결스프링 시큐리티 OAuth2
RSA 검증 기능 구현 - PublicKey.txt 에 의한 검증 46:20
/api/user get 요청시 JwtAuthorizationRsaPublicKeyFilter#doFilterInternal코드를 블록에서 에러가 발생합니다.Jwt jwt = jwtDecoder.decode(getToken(request)); String username = jwt.getClaimAsString("username");디버깅으로 따라가봤습니다.JwtAuthenticationFilter#getToken 리턴값으로(토큰값에서 Bearer를 없애고 리턴한 값)Jwt jwt = jwtDecoder.decode(getToken(request));위 코드를 실행했었어야 했는데 자꾸 프로그램이 종료가 됩니다?원인을 알 수 가없습니다.깃 클론 링크입니다. git@github.com:InSuChoe/spring-security-oauth2.git
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
WSASend
좋은 강의 감사드립니다.::WSASend(_socket, wsaBufs.data(), static_cast<DWORD>(wsaBufs.size()), OUT &numOfBytes, 0, &_sendEvent, nullptr))전체적인 소스에서 데이터가 일부만 보내진 경우에 대한 처리가 안되어 있는것 같은데요,일부만 보내지는 경우가 거의 희박하여 구현하지 않으신건지, 아니면 구현되어 있으나 제가 잘못 이해하고 있는건지 궁금합니다.
-
미해결취미로 해킹#3(WebGoat)
SQL 인젝션 advance 마지막강의에
나오는 첫번째 방법 혹시 따로 알려주실 수 있나요?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
multer UTF-8 지원관련 질문입니다.
안녕하세요. 제로초님 강의 잘 듣고있습니다.해당 강의를 듣고 구현했는데 한글파일이 다음과 같이 특수문자로 변환되어 저장되더라고요6._한우물회(함양집).jpg 6._íì°ë¬¼í(í¨ìì§)_1666847920317.jpg그래서 어디에서 파일명이 변경됬는지 확인해보니 다음과 같이 multer에서 변환이 되고있었습니다. 프론트에서 폼데이터 출력결과// front/imageupload const onChangeImages = useCallback((e) => { const imageFormData = new FormData(); imageFileList.forEach((f) => { imageFormData.append('image', f.originFileObj); }); for (let key of imageFormData.keys()) { console.log(key, ":", imageFormData.get(key)); } dispatch({ type: UPLOAD_IMAGES_REQUEST, data: imageFormData, }); }, []); 서버에서 출력결과const upload = multer({ storage: multer.diskStorage({ destination(req, file, done) { done(null, 'uploads'); }, filename(req, file, done) { console.log(`file이름은 ${file.originalname}`); const ext = path.extname(file.originalname); const basename = path.basename(file.originalname, ext); done(null, basename + '_' + new Date().getTime() + ext); }, }), limits: { fileSize: 20 * 1024 * 1024 },file이름은 6._íì°ë¬¼í(í¨ìì§).jpg 해당문제를 해결하려고 encodeURIComponent, decodeURIComponent를 사용해봤는데 다음과 같이 문제는 해결되지 않았습니다.const upload = multer({ storage: multer.diskStorage({ destination(req, file, done) { done(null, 'uploads'); }, filename(req, file, done) { console.log(`file이름은 ${file.originalname}`); console.log(`변환된 이름은 ${encodeURIComponent(file.originalname)}`); console.log(`변환된 이름은 ${decodeURIComponent(file.originalname)}`); const ext = path.extname(file.originalname); const basename = path.basename(file.originalname, ext); done(null, basename + '_' + new Date().getTime() + ext); }, }), limits: { fileSize: 20 * 1024 * 1024 }, });file이름은 6._íì°ë¬¼í(í¨ìì§).jpg 변환된 이름은 6._%C3%AD%C2%95%C2%9C%C3%AC%C2%9A%C2%B0%C3%AB%C2%AC%C2%BC%C3%AD%C2%9A%C2%8C(%C3%AD%C2%95%C2%A8%C3%AC%C2%96%C2%91%C3%AC%C2%A7%C2%91).jpg 변환된 이름은 6._íì°ë¬¼í(í¨ìì§).jpg 참고로 uploads파일에도 다음과 같이 파일명이 특수문자로 변경되어 저장되고 있습니다. 이 문제 혹시 multer에서 UTF-8을 지원하지 않아서 발생하는 문제인가요?혹은 다른 이유가 있다면 위 문제에 대한 해결방법을 알 수 있을까요?
-
해결됨(UPDATED) Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
model.predict에 특정 user id로 상위 movie 5개 출력?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 추천시스템을 다양한 방법을 통하여 쉽게 설명해 주셔서 감사합니다.질문과 같이, compile -> fit 해서 생성된 model에특정 user id 를 입력하여 추천된 상위 movie 5개를 출력해보려고 합니다. 강의 예제의 아래 부분의 user_id와 movie_id 그리고 직업을 입력해서해당 predictions 값에서 상위 movie를 가져올 수 있지 않을까 생각중 입니다. predictions = model.predict([user_ids, movie_ids, user_occ]) + mu 문제는, 딱 여기서 막혔습니다. 예제에는 6개의 사용자, 영화, 직업 받아서Predictions: [[4.0556927] [3.5347672] [2.4461157] [4.1715736] [3.9802952] [3.9247046]] 이렇게 보여지는 것같아서, 저것을 어떻게 사용해서, 영화 목록 5개면 5개 ,10개면 10개를 가져올 수 있을까요?
-
미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
bs4 활용 2-1 질문합니다.
코드 실행시 정보가 오지 않고 반응이 없습니다!
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
안녕하세요. 강의자료 요청드립니다.
안녕하세요. 강의 자료 요청드립니다.cayraban@gmail.com감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
기존 DB의 테이블과 jpa로 만들어진 테이블과 관계 맺기
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이미 실무에서 사용중인 데이터베이스가 있습니다. 이 DB 안에는 기 생성된 테이블들이 있구요. JPA를 활용해 기존 DB에 접근해 필요한 테이블들을 추가하고 엔티티 매핑하는 작업들은 잘 되었는데요. 문제는 기존 DB의 "User" 테이블과 제가 새로 만든 테이블의 관계를 맺어주는 것이 가능한건가 해서요. [tb_user] <- 기존에 존재하던 테이블 (아래는 스키마)user_id : String : "S00001"name : String : "홍길동"age : int : 30[tb_user_history] <- 새로 등록한 테이블@Entity @Data @Table(name="tb_user_history") public class UserHistory { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name="user_history_id") private Long id; //연관 관계를 맺어주는게 가능한가요?????? private String user_id; }제 프로그램상에서 생성하고 관리하는 테이블이라면 @ManyToOne, @JoinColumn을 이용해서 조인과 외래키 생성 작업을 해줄수있는데 지금과 같은 경우에서는 어떤식으로 가능할까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
rabbit mq가 ms(configservice, apigatway ,userservice) 들이랑 connection을 맺을 수 있는 조건?
안녕하세요 선생님제목처럼 어떤 조건을 갖춰야 ms가 rabbit mq와 connection을 맺는지 궁금합니다.제가 # rabbitmq: # host: localhost # port: 5672 # username: guest # password: guest이것 도 지우고 management include에서 busrefresh도 지워서 결국에는 pom.xml에 dependency 만 남아있는데 다 껐다켜도(ms랑 rabbitmq도) 그래도 ms들이 rabbitmq와connection을 새로 잘 맺는것을 확인 할 수 있었습니다.https://spring.io/guides/gs/messaging-rabbitmq/여기에서 springboot는 Spring Boot automatically creates a connection factory and a RabbitTemplate, reducing the amount of code you have to write.이러하다는데 이래서 depdency만 추가하면 알아서 척척 연결이 되는 것이고 이렇게 사용을 해도 괜찮을 까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
cannot resolve property
application.yml 파일에서 글로벌 필터의 속성 ( baseMessage, preLogger, postLogger) 는 인식하는데 로깅 필터의 속성은 인식하지 못해 cannot resolve property 에러가 납니다. 왜인지 이유를 알 수 없어 질문드립니다.LoggingFilter.java 파일입니다.package com.todaypills.apigatewayservice.Filter; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.OrderedGatewayFilter; import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; import org.springframework.core.Ordered; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.stereotype.Component; import reactor.core.publisher.Mono; @Slf4j //for print log @Component /**커스텀 필터의 일종임, 단지 로그를 찍기 위한 필터이므로 이름을 Logging 이라고 지은 것*/ public class LoggingFilter extends AbstractGatewayFilterFactory<LoggingFilter.Config> { public LoggingFilter() { super(Config.class); } @Override public GatewayFilter apply(Config config) { /** * 위쪽 주석부분은 람다 표현식으로 바로 리턴한 것이고 이것은 람다를 사용하지 않고 리턴한 것임, * 따라서 인스턴스부터 만들어주어야 하고 GatewayFilter는 인터페이스이기 때문에 직접 인스턴스를 생성할 수는 없고, OrderedGatewayFilter() 를 이용하여 인스턴스를 만들어주어야함 * */ GatewayFilter filter = new OrderedGatewayFilter(((exchange, chain) -> { /** exchange: request와 response 객체를 얻기 위함 */ ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response = exchange.getResponse(); log.info("logging filter: request id -> {}", config.getBaseMessage()); if(config.isPreLogger()){ log.info("logging pre filter start: request id -> {}", request.getId()); } return chain.filter(exchange).then(Mono.fromRunnable(() -> { if(config.isPostLogger()){ //Mono 객체: 웹플럭스(스프링5)에서 지원하는 기능으로 비동기방식의 서버에서 단일값을 전달할 때 모노타입으로 전달 log.info("logging post filter end: response code -> {}", response.getStatusCode()); } })); }), Ordered.HIGHEST_PRECEDENCE); //HIGHEST_PRECEDENCE 는 적용할 필터가 여러개일 때 어느것이 먼저 실행될지 우선순위를 부여함 return filter; } @Data // setter getter 함수 생성 (isPreLogger(), isPostLogger() 등) public static class Config{ // 여기에 configuration 이 있다면 삽입 private String baseMessage; private boolean preLogger; private boolean postLogger; } } application.yml 파일입니다.server: port: 8000 eureka: client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:8761/eureka spring: application: name: apigateway-service cloud: gateway: default-filters: - name: GlobalFilter args: # 우리가 정의한 변수 baseMessage: 게이트웨이 글로벌 필터입니다. preLogger: true #prefilter의 유무 postLogger: true routes: #FilterConfig의 라우팅 정보를 yml 파일로도 설정할 수 있음 - id: nutrients-service uri: http://localhost:8081/ predicates: - Path=/nutrients-service/** filters: # - AddRequestHeader=nutrients-request, nutrients-request-heaer-value # - AddResponseHeader=nutrients-response, nutrients-response-header-value - name: CustomFilter - name: LoggingFilter args: baseMessage: 커스텀 로깅 필터입니다. preLogger: true postLogger: true
-
미해결실전! Querydsl
질문드립니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]기초적인거라서 예전에 강의를 전부 보고 다시 찾으려고 하니 잘 못찾겠습니다.. (있었는지도 의문?)select 시에 getter 로 가공을 거치는 방법이 있나요?jpaQueryFactory.select( Projections.bean( UserHistoryOutput.Chart.class, userHistory.bodyHeat.avg().divide(10).floatValue().as("bodyHeat"),public class UserHistory extends BaseCreateTimeEntity { ..... public Float getBodyHeat() { return Optional.ofNullable(bodyHeat).orElse(0f) / 10f; } userHistory 에서 getter를 이용하여 뽑아올 경우 divde 10을 해주고 있습니다하지만 querydsl 을 이용해서 하면 순수 데이터를 가공없이 그대로 뽑아오던데dto를 통해서 뽑아오는 방법이 있을까요?
-
미해결스프링부트 시큐리티 & JWT 강의
httpBasic방식
httpBasic방식은 authorization에 id와 pw를 넣어서 보낸다고 하셨는데 그럼 이전강의에서는 httpBasic방식을 disable안하셨으니까 이전강의에서는 id와 pw를 넣어서 보냈다는 건데 그 말이 로그인시를 말하는 건가요?? 로그인이 한번되면 sessionId로 확인하면 되니까 로그인시에만id와 pw을 보낸다는 건지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
assertThrows에 대해 구글링 해서 정리해봤는데 이렇게 이해하는게 맞을까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]@Test@DisplayName("빈 이름으로 조회X")void findBeanByNameX() {//MemberService xxxxx = ac.getBean("xxxxx", MemberService.class);Assertions.assertThrows(NoSuchBeanDefinitionException.class,() -> ac.getBean("xxxxx", MemberService.class));}
-
미해결홍정모의 따라하며 배우는 C언어
잘 모르겠어요
왜 Enter next integer (q to quit) : 두 번 출력 되고 Sum 값이 이상하게 출력 되는지 잘 모르겠습니다..#include <stdio.h> int main() { int sum = 0; char input = ' '; printf("Enter an integer (q to quit) : "); scanf("%c", &input); if (input != 'q') { sum += (int)(input - 48); while (1) { printf("Enter next integer (q to quit) : "); scanf("%c", &input); if (input == 'q') break; sum += (int)(input - 48); } } printf("Sum = %d", sum); return 0; }