묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨IT 기업 취업을 위한: 코딩테스트 혼자서 정복하기 (C/C++)
입력함수 출력함수 관련
안녕하세요 좋은 강의 감사합니다.수업 중 코드 작성 부분을 보면 #include <iostream>을 하지만입력 함수로는 scanf 출력 함수로는 printf 를 사용하십니다.혹시 왜 그런지 이유를 알 수 있을까요?C++로 작성한다면 cin, cout 등이 있음에도 왜 C에서 사용하는 입출력 스트림을 사용하는지 궁금합니다.
-
미해결HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 무료 강좌
pwm 주기 강의 질문드립니다.
PWM 3번째 강의 10분 39초 내용 질문 드려봐요~ARR 대신 프리스케일러를 변경하여 PWM을 바꾸는 내용이 이해가 잘 안되는데요. TIM2->CCR1 = ARR레지스터 값 / 2를 ARR값이 바뀌지 않는다고 지우셨는데 while문 전에 초기화에서는 ARR /2를 CCR레지스터에 설정 해줘야하지않나요?그래야 50% 토글이 될 것 같아서요.추가적으로 CubeMX에서 PWM 설정을 할 때 Internal clock을 선택해주는데내부 클락은 정확도가 떨어진다고 들었는데 Internal clock 으로밖에 못하는건가요?아니면 PWM 정확도와 내부 클락 선택 여부와는 관계가 없는건가요??감사합니다~
-
미해결홍정모의 따라하며 배우는 C언어
<10.11 질문> 배열이 함수에 들어갔을 때
10.11 강의의 11번째줄의 함수를 예로 들어함수의 arguments 정의할때 들어가는 배열을 입력하면 해당 배열의 포인터의 값이 들어가고함수에서 배열에 val 값을 더해줄 때는 배열의 포인터에 val 값을 더해준다고 표현해주셨는데 계산된 결과는 배열의 포인터의 dereferencing된 값에 val값을 더해준 것이였습니다.저는 포인터 연산이 되어 해당 배열 값에 val*(자료형의 크기 값이) 더해질 줄 알았습니다.함수의 arguments에서 배열을 포인터로 정의하고 함수 내부에서 배열을 쓸 때 포인터값과 dereferencing된 값(즉, 배열의 값)이 어떻게 구분되는건가요??
-
미해결홍정모의 따라하며 배우는 C언어
수업 소스코드 제공은 안해주나요?
빠르게 C 개념을 학습해야 하는 입장에서 매번 수업 소스 코드를 치기도 번거롭네요.단순히 개념만을 알기 위한 학습자를 위해서 수업에 사용한 소스 코드를 따로 올려주셨으면 합니다.어떤 강의는 소스 코드만 60~80줄이 되서 매번 강의 듣다가 정지하고 코드 치고강의 듣고 정지하고 소스코드 치고 무한 반복입니다.소스 코드쳐도 중간에 매번 매번 소스 코드를 바꿨다가 저리 바꿨다가 하는 경우가너무나 많아서 강의가 20분 짜리면 코드 치느라 10분 이상을 추가로 더 잡아먹습니다.제공되기 힘들다면 그 이유를 알려주시면 감사하겠습니다.
-
미해결홍정모의 따라하며 배우는 C언어
7.2강 대소문자 변환 문제 질문
대소문자 변환문제 while문안의 코드가while ((ch=getchar()) != '\n') { if (ch >= 'a' && ch <= 'z') ch -= 'a' - 'A'; else if (ch >= 'A' && ch <= 'Z') ch += 'a' - 'A'; putchar(ch); }로 하면 작성이 잘되고 while ((ch=getchar()) != '\n') { if (ch >= 'a' && ch <= 'z') ch -= 'a' - 'A'; if (ch >= 'A' && ch <= 'Z') ch += 'a' - 'A'; putchar(ch); }밑의 else if를 if로 작성하면 소문자가 대문자로 변환이 안되는데 , 왜 위의 if문이 작동이 안되는걸까요? 이해가 잘 가지 않습니다..ㅠ
-
미해결홍정모의 따라하며 배우는 C언어
scanf 무시
int main() { char t = 0; int red; printf("enter char : "); red = scanf("%c", &t); while (red==1) { printf("OK\n"); printf("enter next char : "); red = scanf("%c", &t); } printf("END\n"); return 0; } q를 입력했을 때 생각한 결과는enter char : qOKenter next char :이건데while문 안에 있는 scanf가 입력을 한번 건너뛰더라고요. q를 한번 입력했더니 결과로enter char : qOKenter next char : OKenter next char :이렇게 나왔습니다 왜 입력을 건너뛴건가요??
-
미해결홍정모의 따라하며 배우는 C언어
putchar() getchar()
char ch; ch = getchar(); while (ch != '\n') { putchar (ch); ch = getchar (); } putchar (ch); 위쪽에 있는 ch = getchar();를 통해 qwer의 문자를 입력 받았다고 하면 putchar()에서 한문자씩 출력이 되서 처음에는 q값이 출력이 되면그 다음 코드인 ch = getchar();를 만나는데 여기서 다시 ch의 값을 다시 입력해줘달라는 코드 아닌가요? 처음 ch = getchar();에서는 입력을 받았는데 왜 while문 안에있는 ch = getchar();에서는 입력을 다시 안하는 건가요??
-
미해결홍정모의 따라하며 배우는 C언어
while(getchars() != '\n')continue;
scanf("%c %d %d", c, rows, cols)while(getchars() != '\n')continue; 에서 의문이 드는 점은 scanf로 입력을 받고 while문 안에있는 putchar에서 입력을 한번 더 받아야 하는거 아닌가요?
-
미해결홍정모의 따라하며 배우는 C언어
7.2강 25분경 마지막 문제 질문입니다!
대소문자 교환 문제에서 while ((ch = getchar()) != '\n') { if (ch >= 'A' && ch <= 'Z') ch += 'a'-'A'; else if (ch >= 'a' && ch <= 'z') ch -= 'a'-'A'; putchar(ch); }라는 코드에서 밑부분에 else if 를 사용하면 정상 작동이 되는데 else if 가 아닌 그냥 if를 사용하면 소문자는 잘 바뀌는데 대문자가 소문자로 변하질 않네요... 이유가 뭘까요?ㅠㅠ
-
미해결홍정모의 따라하며 배우는 C언어
getchar()관련 자료형 질문
char get_first_char(void){ int ch; ch = getchar(); while (getchar() != '\n') continue; return ch;}이 코드에서 getchar()이 반환하는 자료형은 int이고 return 값으로는 char값인 것에 대해 궁금했는데요, ch = getchar(); 이 부분에서 getchar()이 입력받은 문자의 아스키 코드(int)를 반환하고 이를 return ch; 에서 ch가 입력받은 아스키코드에 대응하는 문자 char자료형으로 return한다고 생각하는데 맞나요?
-
미해결홍정모의 따라하며 배우는 C언어
터미널 관련 질문이 있습니다
Mac OS 에서 Visual Studio Code를 통해 c언어를 공부하고 있습니다. 기본 세팅은 다 맞췄는데 Run code를 하게 되면 항상 터미널에 결과가 나온 다음 사진처럼 %가 붙어서 나옵니다...이유가 뭔지 알 수 있을까요??
-
해결됨IT 기업 취업을 위한: 코딩테스트 혼자서 정복하기 (C/C++)
강의자료
안녕하세요. 제가 못 찾은 것일 수도 있지만 '그래프와 탐색 알고리즘' 부분의 강의자료가 보이지 않아서 혹시 업로드해 주실 수 있는지 문의드립니다.
-
미해결홍정모의 따라하며 배우는 C언어
14.5 구조체 dot 선언 오류
구조체 선언할 때, dot을 사용해서 선언하면 아래와 같이 오류가 납니다!주석된 부분에서 오류가 나타나는 이유를 알고 싶습니다!! --------------------------------------------------------------------------------------------------#define CRT_SECURE_NO_WARNINGS#include <stdio.h>#define LEN 41struct names { char given[LEN]; char family[LEN];};struct reservation { struct names guest; struct names host; char food[LEN]; char place[LEN]; int year; int month; int day; int hours; int minutes;};int main(void){ //struct reservation res { // .guest = { "Nick", "Carraway" }, // .host = { "Jay", "Gatsby" }, // .place = { "the Gatsby mansion" }, // .food = { "Escargot" }, // .year = 2022, // .month = 4, // .day=10, // .hours = 18, // .minutes=30 //}; struct reservation res { { "Nick", "Carraway" }, { "Jay", "Gatsby" }, { "Escargot" }, { "the Gatsby mansion" }, 2022, 4, 10, 18, 30 }; printf("\Dear %s %s \n\I would like to serve you %s.\n\Please visit the Gatsby mansion on %d/%d/%d at %d:%d.\n\Sincerely, %s %s\n", res.guest.given, res.guest.family, res.food, res.day, res.month, res.year, res.hours, res.minutes, res.host.given, res.host.family); return 0;}
-
미해결홍정모의 따라하며 배우는 C언어
getchar() , 버퍼 질문
while (1) { printf("Current count is %d. Continue? (y/n)\n", count); int c = getchar(); if (c == 'n') break; else if (c == 'y') { while (getchar() != '\n') continue; count++; }이 코드에서 int c = getchar();에서 입력을 받고 버퍼에 저장된 후while (getchar() != '\n') continue; 이 코드를 통해 버퍼에 있는 문자가 하나 씩 반환 되면서 버퍼가 비워지고 다시 int c = getchar(); 을 통해 입력을 받는다고 이해했습니다. 우선 이 과정이 맞게 이해한 건지 궁금합니다. 그리고 또 궁금한 것은 하나의 프로그램에서 버퍼는 오직 하나만 존재하는 것인가요?
-
미해결홍정모의 따라하며 배우는 C언어
3.6 정수의 오버플로우 강의 중 _itoa 함수 오류
안녕하세요 선생님!강의를 따라하던 도중 itoa 함수에 오류가 떠서 질문드립니다.분명 선생님과 똑같이 친 것 같은데 왜 오류가 날까요??뭐가 문제일까요...????어떻게든 고쳐보려고 오류 나온 문구를 구글링 해보니까 itoa함수가 표준함수가 아니라서 오류가 난다는데...ㅜㅜ솔루션 보니깐 그냥 sprintf라는 함수를 사용하라 하더라구요.. 아니면 itoa 함수를 직접 정의하라던데 아직 걸음마 걷는 입장에서는 그 방법이 도저히 이해가 안가서..해결책이 궁금합니다ㅜ
-
미해결홍정모의 따라하며 배우는 C언어
vs code gcc
비주얼 스튜디오 코드 터미널에 gcc 입력하면 저렇게 뜨는데 해결방법이 있을까요...?
-
미해결홍정모의 따라하며 배우는 C언어
6.1 scanf 반환값
int main(){ int num = 0,red=0, sum = 0; int status; printf("Enter an integer (q to quit) :"); status= scanf("%d %d", &num, &red); while (status >= 1) { sum = sum + num + red; printf("Enter next integer (q to quit) : "); status = scanf("%d %d", &num, &red); } printf("Sum = %d", sum); return 0;}여기서 정수를 입력받은 변수의 갯수로 scanf의 반환값이 status라는 변수에 저장되는 것으로 이해했는데요 변수 num red에 각각 순서대로 1 2 / 3 4 / q 5를 넣으며 디버거로 확인해봤는데요. 세번째 scanf에 5라는 정수를 입력해서 status 값이 1이 나올거라 생각했는데 왜 status값이 0으로 나올까요? num에 숫자가 아닌 문자를 넣어서 red에도 영향을 주는건가요??/5 q 순서로 바꿔서 넣어봤을때는 status값이 1이 나와 4번째 scanf를 입력하려 했지만 그냥 그대로 끝이나고 sum도 4가 중복돼서 10과 19로 값이 다르더라고요. 문자를 입력하면 뒤에 변수에도 영향을 주는거 같은데 확실하지 않아서 질문드립니다.
-
해결됨독하게 되새기는 C 프로그래밍
buffered-io가 사용하는 버퍼메모리에 대한 질문있어요
먼저 항상 특별한 강의 잘 듣고있습니다. 감사합니다.1. buffered-io의 buffer 메모리는 어플리케이션 메모리죠?제가 이해하기로는buffered-io방식으로 write를 한다면 호출시 바로바로 write시스템콜을 호출하는게아니라, 버퍼라고 부르는 어플리케이션메모리에 내용을 써놨다가 일정 byte이상 차게되면 실제 write시스템콜을 호출함으로써 시스템콜을 줄일 수 있는게 핵심이라고 이해했는데 맞을까요?결국에 이때 buffer라는 memory는 어플리케이션의 메모리를 말하는거죠? (커널의 메모리가 아니구요)2. read(input)에서의 buffered-io시스템콜을 한방에 하기위해서 최대한 뒤로 미루는 버퍼방식의 write와 비교해서read의 경우에는 일단 시스템콜을 호출해야할것같은데 맞나요? 따라서 read에서의 buffered-io는 모아서 시스템콜을 한다기보다는 buffer라는 chunk단위로 한방에 읽을 수 있는걸 buffered-io한다고 이해하면 맞을까요?제가 이해하기로는 buffered-io에서의 buffering방식이 read시에, write시에 다르게 느껴져서요.
-
미해결홍정모의 따라하며 배우는 C언어
14.24 복잡한 선언을 해석하는 요령
작성된 코드문 주석 중, A function cna't return an array 라는 부분이 있고 바로 밑에 이 부분에 대한 예시로 주어진 코드가 int f(int)[]; // Wrong 입니다. 위의 말은 곧 '함수는 배열을 반환할 수 없다'는 것인데, 함수의 반환 자료형이라고 한다면 가장 앞에 붙는 것이지 않나요? 저 코드의 경우 배열을 나타내는 기호가 가장 뒤에 붙어 있는데 어떻게 저와 같은 모양이 '배열에 대한 반환'이 되는 건가요? 하나 더 궁금한 것은, typedef는 '다음에 오는 것을 그 다음에 오는 것으로 바꿔서 쓰겠다, ex. typedef xx xxx면 xx를 xxx로 쓰겠다'라는 생각하고 있었는데 typedef int* FCN(void); typedef FCN* FCN_PTR; typedef FCN_PTR FCN_PTR_ARRAY[10]; FCN_PTR_ARRAY x3;이 코드의 세 번째 줄을 보면 'FCN_PTR을 FCN_PTR_ARRAY[10]이라고 바꿔쓰겠다'라고 해석해야 옳지 않나요? 즉 [10]은 배열의 기능을 하는 것이 아닌, 그저 작성된 이름에 불과해야 하지 않나요?
-
미해결홍정모의 따라하며 배우는 C언어
5.4강 5분 쯤 질문있습니다!
while 문 안에서 fund를 %lf가 아닌 %f로 출력하는 이유가 궁금합니다..ㅠ