묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결홍정모의 따라하며 배우는 C언어
재귀호출 질문입니다
n=4가 되었을 때이처럼 함수가 중첩된 상태라고 저는 이해했고, n=4가 되어 if문에 들어가지 않게 되자 원래 myfunc함수에서 if(n < 4)//stop condition my_func(n + 1); printf("Level %d, address of variable n = %p\n", n, &n);이 부분에 있는 myfunc때문에 이 밑에 있는 printf("Level %d, address of variable n = %p\n", n, &n); 가 4번 실행 못한 상태가 되었기 때문에 지금 기준 20, 21번 줄을 반복하면서(처음에 중첩되면서 못 돈 부분들을 돌고 있음) myfunc함수가 myfunc안에 없었다면 이런일도 없었겠지만 안에 있는 myfunc함수 때문에 출력이 못된 부분들이 마지막에 순차적으로 나오는 것이라고 이해하면 될까요?
-
미해결홍정모의 따라하며 배우는 C언어
조건문에 c == 'a' 대신에, c == 'a' | 'A' 를 하면 에러가 발생합니다
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int printfMenu() { printf("Enter the letter of your choice:\n"); printf("a. avengers "); printf("b. beep\n"); printf("c. count "); printf("d. quit\n"); } int selectA() { printf("Avengers assemble!\n"); } int selectB() { printf("\a"); } int selectC(){ int n; printf("Enter an integer:\n"); scanf("%d", &n); for (int i = 1; i <= n; i++) { printf("%d\n", i); } } int clearBuffer() { while (getchar() != '\n') continue; } int main() { char c; while (1) { printfMenu(); c = getchar(); printf("%c", c); if (c == 'a'|'A') { selectA(); } else if (c == 'b'|'B') { selectB(); } else if (c == 'c'|'C') { selectC(); } else if (c == 'd'|'D') { break; } else { printf("Wrong input. try again.\n"); } clearBuffer(); } return 0; }강의 전에 혼자 만들어본 코드인데요. 그 전에는 모든게 정상작동되었는데, 기존의 " if(c == 소문자알파벳)" 에서 " if(c == 소문자 | 대문자 )" 로 변경하면 scanf에 무엇을 입력하던지 if (c == 'a'|'A') 가 true가 되어 실행됩니다. c에 입력이 잘못들어가는지 F10으로 확인해보려고 printf("%c", c); 코드도 추가해서 찍어봤는데, c = 'B' 처럼 변수에 제대로 저장되어도, 조건문 if (c == 'a' | 'A')가 실행되네요. 제가 무엇을 잘못한건가요?? 어떻게 고칠수 있을까요 ?? 답변 부탁드리겠습니다 !
-
미해결홍정모의 따라하며 배우는 C언어
8.8 질문있습니다
밑 부분 getfirstchar 함수부분 질문입니다.while((ch = getchar()) != '\n') continue; ch = getchar(); while (getchar() != '\n') continue;윗 부분이 제가 한 것이고 밑 부분이 정답인데 제 것을 복사해서 정답예제에 바꿔 넣어서 하니 넘어가지 않고 try again부분이 계속 반복됩니다이 부분이 문제가 있는건 맞는데 왜 문제가 생기는지 정확하게 모르겠어요 ㅜㅜ
-
미해결문제로 배우는 C언어
질문 있습니다.
Compilation results...--------- Errors: 0- Warnings: 0- Output Filename: C:\Users\Desktop\AA\AA1.exe- Output Size: 127.9296875 KiB- Compilation Time: 1.45s결과 값이 이렇게 나오면 무슨 문제가 있는 걸까요...?
-
해결됨CUDA 프로그래밍 (5) - C/C++/GPU 병렬 컴퓨팅 - 아토믹 연산 atomic op
28-4 shuffle shared - shared memory 강의에서 질문이 있습니다.
안녕하세요. 강의 정말 너무 잘 보고 있습니다!! 다름이 아니라 28-4 강의를 보다 궁금하게 있어서 질문을 드립니다.even odd방식이 Half and Half 알고리즘보다 느린 이유Global Memory에서 Half and Half가 even odd보다 더 느린 이유위 두 가지 이유에 대해서는 이해가 되었지만, Shared Memory를 사용하는 부분에서 이해가 잘되지 않는 부분이 있습니다. Global Memory에서는 Memory Coalescing이 중요하기 때문에 Half and Half가 더 느린게 맞지만, Shared Memory를 사용하는 부분에서는 두 방식(even odd, Half and Half)에서 차이가 없지 않을까 하고 생각했습니다. 두 방식 모두 Global Memory에 접근하고 Write하는 로직은 같기 때문에 Shared Memory에서 성능을 저해하는 요소로는 Bank Conflict만 있다고 생각했는데, 제가 잘못 이해 하고 있는 걸까요??
-
미해결홍정모의 따라하며 배우는 C언어
질문 두 가지가 있습니다
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void display(char cr, int lines, int width); int main() { char c; int rows, cols; // 종료를 깔끔하게 하지 못한다 // while(1) // { // scanf("%c %d %d", &c, &rows, &cols); // while(getchar() != '\n') continue; // display(c, rows, cols); // } printf("input one char and two int :\n"); while ((c = getchar()) != '\n') { scanf("%d %d", &rows, &cols); display(c, rows, cols); printf("input another character and two int : \n"); printf("press enter to quit.\n"); } return 0; } void display(char cr, int lines, int width) { for(int i = 0; i < lines; i++) { for(int j = 0; j < width; j++) { printf("%c",cr); } printf("\n"); } }첫 번째는 강의 5분쯤 밑에 코드로 내려와서 실행하시는데 처음에 * 3 5엔터 후 종료되는 것이 아닌 % 2 2를 이어서 하시는데 제 딴에는 똑같이 따라한 것 같은데 첫번째 엔터 후 종료가 되버립니다.두 번째는 밑에 display함수에서 저는 printf를 사용했고 선생님은 putchar을 사용하셨는데 제 생각에는 별다른 차이가 없을 것 같고 첫 번째 문제를 만나기 전까지는 결과가 이상이 없어 괜찮을 거 같은데 혹시나 해서 그냥 짧게 쓰고자 하는 목적인지 질문합니다
-
미해결
dev c++ 컴파일이 안 됩니다.
dev c++ 설치 이후, Run을 클릭하면 컴파일이 되어야 하는데, source file not compiled가 뜨면서 아예 컴파일 실행이 되지 않습니다. 보통 밑에 컴파일 창이 떠야 하는데, 문서로 저장만 되고 그 이상은 안 되네요. 교수님 말씀으로는 노트북 안의 특정 파일에 제약이 걸려있어서 그렇다고 하시는데... 혹시 해결 방법 있으면 알 수 있을까요?
-
미해결홍정모의 따라하며 배우는 C언어
제가 짜본 코드로는 잘 안 나오는데 왜일까요
printf("Enter some text: "); while ((c = getchar()) != STOP) { n_char += 1; if ((c = getchar()) == ' ') n_word += 1; if ((c = getchar()) == '\n') n_line += 1; } printf("characters=%d, words=%d, lines=%d\n", n_char, n_word, n_line);디버깅을 찍어보는데 디버깅 과정 자체가 이해가 어려워서 어디가 문제인지 모르겠더라고요.빈칸이나 엔터가 있을 때마다 word와 line을 카운팅을 늘려주려고 했는데 출력값은 되게 다르더라고요. 마침표도 여러번 찍어야 루프에서 탈출하고뭐가 어떻게 문제인지 모르겠습니다
-
해결됨독하게 되새기는 C 프로그래밍
안녕하세요 강사님 보안 챕터의 쉘코드 부분을 인상깊게 봤어요.
gets 함수 취약점을 이용해서 쉘코드를 실행시키는 부분이 너무 인상적이어서 그 부분만 제가 방문하는 카페에 공유하고 싶은데 가능할까요?
-
미해결홍정모의 따라하며 배우는 C언어
1.9강
따라했는데 다르게 나와요
-
해결됨홍정모의 따라하며 배우는 C언어
포인터 동적할당 sizeof()의 크기와 strlen()가 다른 부분
안녕하세요~ 강의 마지막 부분에 동적할당 관련하여 이해가 안되는 부분이 있어서 질문 드립니다.sizeof(str5)의 경우 메모리 크기가 4이고 strlen(str5)인 경우 5로 나오는데요. "Hello"는 5byte이고 sizeof(str5)은 4byte인데 str5 변수에 "Hello"가 어떻게 들어갈 수 있는지 궁금합니다
-
해결됨독하게 되새기는 C 프로그래밍
스택 메모리는 왜 아껴야 하는건가요?
기본적으로 힙과 스택이 어떤 식으로 사용되는지는 알고 있는데요,다만 스택의 기본 최대 크기가 1MB라는 점이 잘 이해가 안됩니다..아마 제가 실무를 경험해본 적이 없어서 공감을 못하는 듯한데이 1MB라는 것이 기본값으로 쓰일 만큼 적절한 크기인가요?제 생각엔 그렇게 널널한 크기는 아닌 듯한데.. 그렇게까지 아껴야 하는 이유가 뭘까 싶어서 질문드립니다그냥 힙 영역을 최대한 많이 확보하기 위해서라고 생각하면 될까요?
-
미해결문제로 배우는 C언어
배열을 전역변수로 설정하는 이유
타 강의에서 전역변수는 최대한 사용을 지양하는게 좋다고 들은 기억이 있는데, 해당 강의에서 배열을 전역변수로 사용하는 이유가 있나요??선생님께서 다른 질문글에 답변해주신<배열을 main 함수 밖에 전역으로 선언하면 메모리의 데이터 영역에 할당되며 메모리의 크기가 여유롭게 잡힙니다. 하지만 main 안에 지역변수로 선언하면 메모리의 스택영역에 할당되며 크기가 작아 여유공간이 없습니다. >이 내용과 관련이 있는걸까요?
-
미해결문제로 배우는 C언어
41. A를 #으로에서 질문 있습니다.
풀이를 보기 전에는 string.h의 존재를 몰라서 아래처럼 작성했었습니다.#include<stdio.h> int main() { int i; char word[100]; scanf("%s", word); for (i = 0; i < 100; i++) { if (word[i] == 'A') word[i] = '#'; if (word[i] == NULL) break; } printf("%s", word);여기서 궁금한 것은 for문 속 두번째 줄의 의도가 for문에서 쓸데없이 계속 돌지 않게 하기 위한 것인데, 맞게 반영 된건지 궁금합니다.그러니까 word를 APPLE로 입력했을 때 for문 속에서 i = 5일 때 break가 제대로 작동 되는지 궁금합니다!
-
미해결C언어 슈팅게임 따라만들기
콘솔창 크기 바꿀때 윈도우11에서 속성창이 안보입니다. ㅠㅠ
저 선생님 여기 콘솔창 크기 바꿀때 제 컴퓨터가 지금 윈도우 11이라 그런데.. 속성창이 안보입니다.. 어떻게 해야할까요?..
-
미해결홍정모의 따라하며 배우는 C언어 (부록)
이진 탐색: 탐색 실패하는 경우 어째서 first > last인 경우가 나오나요?
17.15강 이진탐색 강의의 13:10부분입니다.이진탐색에서 만약 탐색을 실패하는 경우 어째서 first >last라는 상황이 발생하는지 잘 모르겠습니다.반복문을 반복해야할 상황이(탐색해야할 상황이) first <= last인 상황이라는 것을 알겠지만, first > last가 되는 상황은 어떻게 유도되는지 모르겠습니다.#include <stdio.h> int BSearch(int ar[], int len, int target) { int first = 0; int last = len - 1; int mid; while (first <= last) { mid = (first + last) / 2; if (target == ar[mid]) return mid; else { if (target < ar[mid]) last = mid - 1; else first = mid + 1; } } return -1; } int main(void) { int arr[] = { 1,3,5,6,7,9,11,13,15,19 }; int index; index = BSearch(arr, sizeof(arr) / sizeof(int), 3); if (index == -1) printf("해당값 없음\n"); else printf("타겟의 위치 : %d\n", index); return 0; }
-
미해결홍정모의 따라하며 배우는 C언어
입력받는 함수 사용할때 디버거
예제 그대로 따라하고 실행하면서hello nice to meet youmy name isi love you.라고 입력했을땐 '.' 이 나올때까지 한번에 입력받는데디버거로 확인해 보려할땐한 줄씩 한줄씩 while문을 다 돌리고 나서 입력을 받더라고요.보기엔 한번에 입력받는 것 처럼 보이지만 사실은 줄바꿈이 입력될때마다 한줄씩 끊어서 입력을 받는 건가요??
-
미해결홍정모의 따라하며 배우는 C언어
메모리 레이아웃에서 스트림의 위치
fopen이 반환하는것은 파일구조체의 포인터입니다.이러한 fopen이 반환하는 파일구조체는 메모리 레이아웃에서 어디에 위치하고 있나요?fopen함수를 사용하면 생기는 파일 구조체를 파일스트림 이라고 이해하면 될까요?그리고 fclose를 사용하는 이유는, 파일이 다 읽히지 않았을 때 버퍼에 남아있는 데이터가 오류를 일으키지 않게 하기 위함이라고 하셨습니다. 그 이유 외에 메모리 누수를 방지하기 위함도 있나요?
-
미해결홍정모의 따라하며 배우는 C언어
질문! int와 main(), 그리고 return에 대해서
안녕하세요 c언어를 공부 중 인 학생입니다.일단 int main()은 '메인 함수가 프로그램 종료 시 return값을 정수형 으로 반환 받겠다.' 의 의미 인 건 알겠습니다. 그래서 main함수 앞에 정수형인 int 가 붙는 것 이고요. 그런데 여기서 return값에 대해 궁금한게 프로그램을 성공적으로 종료 시켰다 라는 의미로 값 0을 반환 하는데 굳이 반환 값이 꼭 0 이여야 하나 궁금합니다. 0이 아니여도 1, 4, 5, 7, 같은 다른 정수를 반환 시켜도 프로그램은 정상적으로 작동 하는 거 같은데 0과 다른 정수들의 차이점을 모르겠습니다. int main() 함수에서 return 값을 반환 시킬때 꼭 0을 쓰는 이유가 있나요?
-
해결됨독하게 되새기는 C 프로그래밍
함수호출규약 중에서 fastcall 관련 질문 드립니다!
fastcall이라는 규약이 메모리에 매개변수를 저장하는 것이 아니라, 레지스터 쪽에 매개변수를 저장해서, 메모리에 매개변수를 다시 저장할 필요가 없도록 만들기 때문에 속도가 빨라진다는 것으로 이해를 했습니다! 그런데, 제가 메모리를 찾아보니까 수업 중에서 예제로 드셨던 add 함수의 매개변수 param1, param2가 메모리에서 똑같이 잡혔는데, 이건 어떻게 이해하면 좋을까요? 디스어셈블리로 확인해보니까 ECX, EDX 레지스터에 각각 param값들이 저장이 잘 되는 것은 확인을 했는데, 상황이 그렇다면 fastcall인 경우 레지스터에만 값이 들어가면 될 것 같은데, 이게 똑같이 메모리에서 매개변수의 주소가 잡힌다는 것이 약간 의아합니다!