묻고 답해요
148만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결홍정모의 따라하며 배우는 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로 출력하는 이유가 궁금합니다..ㅠ
-
미해결홍정모의 따라하며 배우는 C언어
result 선언 질문
6.18 강의 중 3분 25초에 int result 를 1로 초기화 하셨는데, 강의에서 나온 코드와 똑같이 만들고 result를 0으로 초기화 하여 빌드했을때는 오류가 났지만 1로 초기화 했을 때에는 컴파일에 성공하였습니다.왜 result를 1로만 초기화 했을 때 컴파일 성공이 되는지 궁금합니다. 감사합니다.
-
해결됨CUDA 프로그래밍 (1) - C/C++/GPU 병렬 컴퓨팅 - CUDA 커널 kernel
에러처리 매크로에서!!
에러처리 매크로에서 exit을 하게되면 이전에디바이스나 호스트에서 동적할당했던 자원을 해제해주는건가요?? 아니면 메모리해제를 추가적으로 구현해야하나요??
-
미해결홍정모의 따라하며 배우는 C언어
14.22 함수 포인터의 사용 방법
해당 강의에서 선생님께서 ToUpper 함수와 ToLower함수를 직접 만들어서 사용하시는 것을 볼 수 있는데요, 함수 안의 것들을 main함수로 그대로 가져가서 사용하려 할 때(char str[]을 char* str로 바꿔주고) 오류가 발생합니다 왜 그럴까요??
-
미해결홍정모의 따라하며 배우는 C언어
글자 자동완성...
vs code에서는 엔터 키로 글자 자동완성 기능 사용할 수 있었는데 vs에서 엔터 키로는 자동완성 기능 사용할 수 없더라구요... vs에서 탭 키 말고 엔터 키로 자동완성 할 수 있게 만드는 방법이 있을까요..??
-
미해결홍정모의 따라하며 배우는 C언어
7.8강 단어 세기 예제에서 flag의 논리값
7.8강 단어세기 예제에서 교수님께서 제시한 코드입니다.(word 개수 체크는 구현하지 않은 지점까지)두번째 if문에서 공백이 아니고 line_flag값이 true가 아니라면, n_lines의 값을 증가시키고 line_flag 값을 true로 바꿔주고 있고세번째 if문에서 개행문자라면 line_flag 값을 false로 바꿔주고 있습니다.다만 line_flag의 값이 true가 아닌 상황에서 n_lines의 값을 증가시킨다는 흐름이 직관적으로 와닿지 않아 다음과 같이 코드를 바꿔보았습니다.#include <stdio.h> #include <stdbool.h> #include <ctype.h> #define STOP '.' int main() { unsigned int n_char = 0, n_word = 0, n_line = 1; char ch; bool line_flag = false, word_flag = false; while ((ch = getchar()) != STOP) { if (!isspace(ch)) n_char++; if (!isspace(ch) && line_flag) { n_line++; line_flag = false; } if (ch == '\n') line_flag = true; } printf("c=%u, w=%u, l=%u\n", n_char, n_word, n_line); return 0; }flag에 해당하는 논리값을 반대로 뒤집은 코드입니다.line_flag 값이 true일 때 n_lines의 값을 증가시키는 것이 더 직관적이라고 생각했습니다.마찬가지로 개행문자를 만났을 때 line_flag 값을 true로 바꿔주는 것이 더 직관적으로 와닿는다고 생각했습니다.대신 n_lines는 1로 초기화했습니다. 일단 텍스트를 입력받는 순간 1줄이 될테니까요.(바로 .을 입력하여 종료시키는 경우는 예외처리를 추가적으로 구현할 필요가 있어보입니다.) +마찬가지 생각의 흐름으로 word 개수 카운팅하는 부분도 교수님께서 제시하는 word_flag의 논리값을 반대로 적용했습니다. 다만, 텍스트를 입력하는 순간 word가 시작된다고 가정하여 word_flag는 true로 초기화했다는 것이 line_flag와의 차이점입니다.#include <stdio.h> #include <stdbool.h> #include <ctype.h> #define STOP '.' int main() { unsigned int n_char = 0, n_word = 0, n_line = 1; char ch; bool line_flag = false, word_flag = true; while ((ch = getchar()) != STOP) { if (!isspace(ch)) n_char++; if (!isspace(ch) && line_flag) { n_line++; line_flag = false; } if (ch == '\n') line_flag = true; if (!isspace(ch) && word_flag) { n_word++; word_flag = false; } if (isspace(ch)) word_flag = true; } printf("c=%u, w=%u, l=%u\n", n_char, n_word, n_line); return 0; }제가 생각한 코드의 흐름에 대한 의견이나 비판 부탁드립니다.
-
미해결홍정모의 따라하며 배우는 C언어
boolean
int True = 1;int False = 0;이렇게 안하고 boolean을 사용 하는 이유가정수인지 true, false인지 명확하게 구분 짓기 위해 boolean을 사용 한다고 하셨는데명확하게 구분 지으면 무슨 이점이 있는건가요??컴퓨터 안에서는 그냥 0 아니면 1로만 인식 하는거 아닌가요??
-
미해결홍정모의 따라하며 배우는 C언어
1.9강 컴파일러와 링커 부분에서 obj 파일
안녕하세요 선생님따라하면서 강의 듣는 중인데요,open containing 으로 열면 obj 파일이 없습니다..그리고 자체 debug 폴더도 없구요(따로 있는 debug 폴더는 있어요,,)뭐가 잘못된걸까요,,??
-
미해결홍정모의 따라하며 배우는 C언어
질문드립니다,,
처음에 #define _CRT_SECURE_NO_WARNINGS를 입력하는 경우는 어떠한 경우에 입력하는건가요..?
-
미해결정혜경 판타스틱 자료구조 in C
17강 알고리즘 문제풀기(Editor)에서 질문있습니다.
안녕하십니까 강사님 강의 듣고있는 수강생입니다.알고리즘 문제풀기(Editor)강의에서 질문있어서 게시판에 글남깁니다.저는 명령어를 입력하는단계에서 for문과 if문을 활용하였는데 첨부드린 사진처럼 for문의 반복횟수가 5번을때는 두번의 L명령어만 실행이됩니다.for문의 반복횟수를 10회이상으로 늘렸을때는 답이 나오는데 무엇이 문제인지 모르겠습니다. fscanf함수를 활용하였는데도 개행문자를 읽는것 같기도 해서 한번 봐주시면 감사하겠습니다..
-
미해결혼자 공부하는 C 언어 저자에게 배우는 C 언어의 모든 것
반환값이 없는 함수 사용에 대하여
반환값이 없는 함수에 나온 예제를 그대로 실행시켜봤는데#include<stdio.h>void print_char(char ch, int cnt){ int i; for (i = 0; i < cnt; i++); printf("%c", ch);}int main(){ print_char('*', 5);}코드를 실행시켰습니다.근데 결과물이 *****이 나와야할거같은데결과가 * 하나만 나와요 뭐가 잘못된건가요?
-
미해결홍정모의 따라하며 배우는 C언어
visual studio 2022, mac에서는 c/c++ 지원이 안되나요?
제목과 동일합니다.visual studio 2022에서 맥은 c/c++지원이 안 된다는데 사실인가요? 그럼 visual studio code로 실습해도 괜찮을지 궁금합니다.
-
미해결홍정모의 따라하며 배우는 C언어
(강의 10:21) 배열의 이름 dest에 "Start something"을 대입하는 것이 안되는 이유
강의 10: 21부분입니다.교수님께서 61번째 문장 dest = "Start something"; //Error에서 에러가 발생한다고 말하셨는데, 어째서 에러가 발생하게 되는 것인지 잘 모르겠습니다.error C2106: '=': left operand must be l-value빌드를 실행해보면 왼쪽은 l-value로서 작동해야한다고 합니다.이미 공간(주소)을 할당받은 배열 dest가 있고,배열의 이름 dest, 즉 포인터에다가, (수정불가능한/읽기만 가능한 프로그램 코드에 있는) "Start something"이라는 문자열의 주소를 대입함으로서 그걸 수정(?)하려 시도했기에 에러가 발생하는걸까 싶기도 하고.. 머릿 속의 개념이 꼬여버렸습니다.※그치만 이것이 안되는 경우는,'포인터로 정의한 문자열이 있을 때 포인터를 통해 인덱싱하여 값을 수정하려고 했을 때" 문제가 발생하는 경우였습니다.이번 dest = "Start something"; //Error의 경우에 해당하진 않을 것 같습니다.
-
미해결홍정모의 따라하며 배우는 C언어
디버깅을 하면 VS가 응답 없음이 되어버립니다
구글링을 통해 나온 방법들을 적용해 보았으나 상황이 변하지 않습니다 어떻게 해야 할까요?