묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결홍정모의 따라하며 배우는 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로 출력하는 이유가 궁금합니다..ㅠ
-
미해결홍정모의 따라하며 배우는 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를 입력하는 경우는 어떠한 경우에 입력하는건가요..?