묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨독하게 시작하는 C 프로그래밍
continue문 질문입니다
#include <stdio.h>int main(void){ char ch; while (1) { ch = getchar(); if (ch == 'x') break; if (ch == 'q') continue; putchar(ch); } return 0;}이 예제에서 한 문자를 입력받을 때마다 while문이 실행되며 x인지 q인지를 검사하는 것으로 알고 있습니다. 만약에 aaaq를 입력하고 엔터를 누르지 않앗다면 q를 입력하는 순간 컨티뉴 문이 작동하여 putchar을 실행 시켜야 한다고 생각하는데 엔터를 눌러야만 작동하는 것이 이해가 안됩니다 ㅜㅜ 또한 getchar 함수는 한 글자씩 입력을 받는데 제가 if(ch == zxc) break;를 추가하고 zxc를 입력 후 엔터를 치면 브레이크 문이 작동 됩니다. 정리하자면 q나 x를 입력하는 순간에 브레이크나 컨티뉴 문이 작동 해야 하는게 아닌가요? 왜 엔터를 쳐야 작동하는지 모르겠습니다. 또한 getchar함수는 한글자만 입력받는 것으로 알고 있는데 왜 문자열로도 작동이 될까요?
-
해결됨독하게 시작하는 C 프로그래밍
독하게 시작하는 C 프로그래밍 책 관련 문의
문제가 된다면 질문은 바로 삭제하겠습니다. 다름이 아니옵고, 책을 구매하고 싶은데 절판이라 너무 아쉽습니다. 혹시 재발간 계획은 없으신지..구할 수 있다면 어디인지 궁금합니다🙏
-
미해결C 프로그래밍 - 입문부터 게임 개발까지
3-3 for 반복문 ++i 일때 질문입니다.
for (int i = 0; i < 10; ++i) { printf("hello world %d\n", i);} 이렇게 코드를 변형해봤습니다.i == 0 인 상태에서반복문 첫번째 실행시 i == 1 이 되어 1부터 실행될거라 생각했습니다.그런데 0부터 시작합니다. 왜인지 이해되지 않습니다 ㅠㅠ
-
해결됨CUDA 프로그래밍 (4) - C/C++/GPU 병렬 컴퓨팅 - 행렬 matrix 곱하기
소스 코드 에러 문의 드립니다
소스코드 그대로 돌리면, 아래와 같은 에러가 발생합니다. (25장 전체 소스가 모두 동일합니다) 이유와 수정 방법을 알고 싶읍니다. // 25d-gemm-alignedTile.cu/tmp/tmpg97edtlu/25d-gemm-alignedTile.cu(98): error: "beta" is ambiguous 1 error detected in the compilation of "/tmp/25d-gemm-alignedTile.cu".
-
미해결홍정모의 따라하며 배우는 C언어
const int angel = 1004;에서 변수였던 angel이 기호적 상수가 되면
const int angel = 1004;에서 변수였던 angel이 const를 붙임으로써 기호적 상수(symbolic constant)가 되면 rename으로 다른 부분에 써놓았던 angel을 전부다 변화시키면 그래도 오류가 나나요? const를 붙인 자료형에서 상수를 바꾸면 오류가 난다고 봤었는데, 변수였던 angel도 고치면 오류가 나나요? 그러니까 angel이라는 이름을 못바꾸는건가요? 아니면 angel에 대입하는 1004라는 숫자를 못바꾸는건가요? 아니면 둘다 못바꾸는건가요?
-
해결됨홍정모의 따라하며 배우는 C언어
8.5강 2분 38초 관련해서 질문이 있습니다.
입력 "A 3 3 "에 대해입력 버퍼에 저장된 값은 "A 3 3 \n"이며"A 3 3" 까지만 읽고AAAAAAAAA를 출력한다는 것은 알겠습니다. 그 다음 입력 "B 1 2 "에 대해입력 버퍼에 " \n"이 남아있으므로입력 버퍼에 저장된 값은 " \nB 1 2\n"이며입력 버퍼에서 개행 문자(\n) 앞의 공백(" ")만 읽어오고나머지 rows나 cols는 이전에 저장된 값을 재사용해서3개씩 3줄의 공백을 출력하는 것 같습니다. 여기서 궁금한 점이..scanf의 첫 번째 인수로 공백(" ")을 읽고 나머지 rows와 cols는 읽지 못했는데 왜 그대로 진행되어 9개의 공백(붉은색 부분)이 출력되는건가요?? 링크의 문서에는 입력 스트림에 저장된 값이 형식 지정자와 다를 경우 scanf를 종료한다고 되어있습니다. 그러면 첫 번째 인수로 공백(" ")을 읽고 한 줄에 3개씩 3줄의 공백(" ")를 출력하고 난 뒤에는개행 문자 ("\n")를 읽어서 9개의 줄 바꿈이 출력되어야 할 것 같은데왜 바로 BB가 출력되었는지 잘 모르겠습니다.. [입력과 그에 대한 예상 출력 콘솔 화면] A 3 3 // 첫 번째 입력 : A 3 3 AAA AAA AAA // 한 줄당 3개의 'A'를 3줄 출력 B 1 2 // 두 번째 입력 : B 1 2 // 한 줄당 3개의 공백을 3줄 출력 // 9번 + 3번 총 12번의 줄바꿈 BBhttps://learn.microsoft.com/en-us/cpp/c-runtime-library/format-specification-fields-scanf-and-wscanf-functions?view=msvc-170 scanf를 실행시켜서 입력 버퍼의 값을 읽고 각각의 인수에 저장한 후에는 입력 버퍼에서 읽은 값을 제거하나요? 아니면 getchar처럼 스트림의 위치를 마지막으로 읽었던 값의 다음 위치로 이동시키나요?? 첫 번째 입력이 "A 3 3"이고 두 번째 입력이 두 번째 입력이 "B 1 2"일 때첫 번째 출력을 한 후 입력 버퍼에 저장된 값이 "\nB 1 2\n"인데scanf가 첫 번째 \n만 읽어서 12번 줄 바꿈 출력 후 종료되는건가요? 계속 구글링 해보고 있지만 답을 찾지 못해서 질문드립니다..
-
해결됨독하게 시작하는 C 프로그래밍
Lookup 배열과 STL MAP 과의 비교
안녕하세요오늘도 잘 듣고 있습니다 Lookup 배열에 대해 보다 보니 stl의 map과 같다는 생각이 들게 되는데요 실제로 lookup 배열과 map 두 자료 구조 형태의 성능에 대한 차이가 궁금하네요 어떤 방식이 더 효율적인지 알고 싶습니다lookup의 경우 index(?) 라고 해야 하나요? ^^ 그런 구성을 사용자가 직접 신경을 써서 정해야 할 것 같지만 이 부분을 제외하면 성능만으로 봤을 때 어느 방식이 더 좋은지 궁금합니다
-
해결됨독하게 시작하는 C 프로그래밍
비트연산을 이용한 뺄셈
비트연산을 사용한 뺄셈에서 a b라고 사용자에게 입력받을 변수 선언하고 (~b+1)+a; 라고 하면 캐리를 고려하지 않은 오류가 발생하지 않나요? 음수간의 뺄셈에서도 오류가 발생할 구간이 있을 것 같은데 설명 부탁드리겠습니다 ㅠㅠ
-
해결됨독하게 시작하는 C 프로그래밍
필수실습문제 MyStrcpy() 함수 작성하기 에서 질문있습니다.
필수실습문제 MyStrcpy() 함수 작성하기 에서void MyStrcpy(char* pszDst, int nSize, char* pszSrc) { size_t nLenSrc = 0; nLenSrc = strlen(pszSrc); for (int i = 0; i < nLenSrc; ++i) pszDst[i] = pszSrc[i]; }로 함수를 정의하셨는데 이럴경우에 매개변수로 들어간 nSize는 함수에서 어떤 의미가 있는건가요...?
-
해결됨독하게 시작하는 C 프로그래밍
정수와 실수 출력에 관하여...
#include <stdio.h> int main(void) { int fee=1000; printf("%d\n", fee * 0.75); int fee2 = 1000 * 0.75; printf("%d", fee2); return 0; }섹션 11의 버스요금 계산 문제를 풀면서 궁금한 점이 생겼습니다. 예제를 작성할때 첫번째 방법으로 풀었더니 출력이 0이 나와서 두번째 방법으로 해보니 정상적으로 750이 출력되었습니다. 이 두 가지 방법의 차이점이 무엇인가요?
-
해결됨독하게 되새기는 C 프로그래밍
함수호출이랑 쓰레드
안녕하세요. 배운 내용을 한번 확인 및 함수호출과 쓰레드의 관계에 대해서 질문 드립니다! main함수에서 다른 함수를 호출할 때는 쓰레드가 생성되는게 아니고 하나의 main 쓰레드가 끝날때까지 진행 되는건가요?그리고 그 실행된 메인 쓰레드는 호출 된 함수로 이동하여 계산 또는 값을 수정 등을 하고 다시 반환하여 메인 함수로 가는 건가요? 만약 동시에(싱글코어로 가정하면) 이러한 실행을 하기 위해서는 쓰레드를 추가하는 것이라고 이해하면 될까요? 싱글코어로 가정한 쓰레드들은 OS가 동기화를 통해 쓰레드들간에 진행을 통제 하는건가요?
-
해결됨독하게 되새기는 C 프로그래밍
리눅스 환경도 스레드 생성 원리는 동일한건가요?
리눅스도 마찬가지로 이해하면 될까요?Os 가 프로세스에게 적절한 메모리를 할당하여 프로세스에게 자원을(메모리 공간)을 주는 것으로 이해했습니다. 프로세스 안에 구성원들(쓰레드) 개별적인 행동을 하는 주체로 이루어져 있다고 이해했습니다. (PS) 저번에 어느 강좌인지는 기억이 안나지만 리눅스는 프로세스 중심 윈도우는 쓰레드 중심으로 자원을 분배한다고 들어서 구분이 필요한가 싶었습니다. 추가로 하나의 쓰레드들은 하나의 main을 실행 시킨다고 배웠습니다. 이게 여러 싱글 코어에서는 쓰레드들끼리 컨텍스트 스위칭을 하면서 동시에 실행이 되는 것처럼 보이는 concurrency 특성이 있다고 정리가 되었는데, 이때 쓰레들끼리는 멀티 쓰레드를 표현하는 것인가요? 멀티 쓰레드가 정확히 어느 레이어에서 사용하는지 구분 짓고 싶습니다. 다른 프로세스 안에 쓰레드를 말하는 것인지 코어들에서 쓰레드를 말하는 것인지 아니면 단일 프로세스 안에 쓰레드를 말하는지 정리가 안 돼서 질문드립니다.정리를 하면서 수업을 들어야 하는데 업무랑 부족한 cs 지식이랑 빠르게 수용하려다 보니 걸리는 부분이 계속 생기는 거 같습니다. 항상 답변을 친절히 알려주셔서 감사합니다.
-
미해결홍정모의 따라하며 배우는 C언어
부호 있는 정수, 부호 없는 정수
예를 들어 8비트 2진수1010 1110 이 있을 때컴퓨터가 어떻게 맨 앞 비트가 부호비트인지 아닌지 아는 것인가요?양수 174가 될수도 있고 음수 -46이 될 수 있는데 컴퓨터가 어떻게 그것을 구분하는 것인지 궁금합니다..
-
해결됨독하게 시작하는 C 프로그래밍
표준입출력 강의를 마치고 질문을 드립니다
printf 함수 같은 경우에는 데이터 Size를 정하지 않고, 어디에 저장 될지를 지정 하지도 않는데,Printf 함수는_getch() or_getche() 와같은 Non buffered I/O같은 방식인가요???
-
해결됨독하게 시작하는 C 프로그래밍
독하게 시작하는 C프로그래밍 교재
안녕하세요독하게 시작하는 C프로그래밍 강의를 구매하고 수강하려하는데 교재가 모두 절판되었네요따로 구할 수 있는 방법이 없을까요?중고 서적으로 보니 가격이 6만원이 넘더라구요...
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
헤드노드 정의
헤드노드 정의 할 때 pNext값에 NULL이라고 적지 않아도자동으로 NULL로 초기화가 되는 건가요?
-
해결됨독하게 되새기는 C 프로그래밍
접근권한과 위변조
실제 위변조 해킹을 할 때 여러방법이 있겠지만, 초기에 접근 권한을 얻어서 위변조를 하는 방식도 있었을까요? Win OS상에서 Hxd 프로그램을 실행하고Linux에서 작성한 bin파일을 가져와서 위변조라는 것을 하려고 하는데 수정이 불가능 했습니다.이에 따른 3가지 가설로linux상에서 bin file에 접근 권한을 chmod를 통해 주지 않았기 때문에 수정이 불가능프로그램을 저장할 때 file을 저장 시킨 system 단은 linux OS이고, binary file을 실행한 HxD프로그램이 win Os라서 불가능 읽기 전용 파일이라서? 2번은 file이 하드디스크에 물리적으로 저장해서 부르는 데는 문제가 없을 것이라 생각했습니다.3번은 HxD가 -rw-r--r-- 1 root root 256 Nov 12 16:34 rdata.bin에서 읽기 전용 파일이기 때문이라고 생각했는데, HxD는 에디터에서 건들 수 없는 것이 말이 되나 싶었습니다..1번이 문제인 줄 알고 sudo chmod 777 bin파일이름을 통해 권한을 부여하니 위변조가 가능했음을 알게 되었습니다.그렇다면 여기서 궁금한 점은 1번에 접근 권한을 허락만 하면 (다른 컴퓨터에 원격으로 제어를 하고 root사용자의 비밀번호를 얻어서) 해킹이 되지 않을까라는 생각이 들어서 질문을 드렸습니다. 너무 궁금해서 수업과는 약간 결이 다른 질문인 점은 죄송합니다..
-
미해결홍정모의 따라하며 배우는 C언어
gcc 오류 이유
왜 오류가 난건가요..?
-
해결됨홍정모의 따라하며 배우는 C언어
7.2강 06:06 질문이 있습니다.
char ch; ch = getchar(); // 1) while (ch != '\n') { putchar(ch); // 2) ch = getchar(); }; getchar와 putchar의 세부 동작 방식이 궁금해서 여쭤봅니다..IBM에서는 getchar 함수의 역할을 현재 스트림 위치의 문자 하나를 읽고 다음 스트림의 위치로 이동한다고 설명되어있는데 스트림의 위치라는게 버퍼의 인덱스를 말하는건가요??https://www.ibm.com/docs/ko/i/7.3?topic=functions-getc-getchar-read-character getchar는 입력 버퍼가 비어있을 때는 입력을 받지만, 입력 버퍼가 차있을 때는 입력 버퍼의 현재 위치의 값을 반환하고 다음 위치로 이동하는 함수라고 이해하면 될까요?? 디버거로 putchar의 동작을 확인했을 때는 입력 버퍼에서 맨 앞의 글자를 한 글자씩 출력하는 것 같은데 그러면 putchar는 버퍼를 사용하는 방식이 아닌건가요?? 이클립스에서는 Ctrl+우클릭 후 Open Implementation을 선택하면 라이브러리 함수가 동작하는 코드를 직접 확인할 수 있는 것 같은데 비주얼 스튜디오에서도 확인하는 방법이 있을까요..??
-
해결됨독하게 시작하는 C 프로그래밍
섹션 13 다차원 배열 실습 문제 중
첫번째 문제 혼자 풀어봤는데 아무리 규칙을 찾으려 해도 이렇게 밖에 안짜지는데요,, 혼자 풀수 있어야 한다고 하셔서 혼자 많이 고민해봤는데 좀 더 좋은 방식을 찾으려고 해도 제 머리로는 도저히 안짜집니다 ㅠㅠ aList[2][3] = aList[0][3] + aList[1][3]; 특히 이 부분이 너무 그냥 막 짠 코드 같아 보이는데 이게 맞는 방식인지 여쭤봅니다.. #include <stdio.h> int main(void) { int aList[3][4] = { {10,20,30}, {40,50,60}, }; for (int i = 0; i < 2; ++i) { for (int j = 0; j < 3; ++j) { aList[i][3] += aList[i][j]; aList[2][j] += aList[i][j]; aList[2][3] = aList[0][3] + aList[1][3]; } } for (int i = 0; i < 3; ++i) { for (int j = 0; j < 4; ++j) { printf("%d\t", aList[i][j]); } putchar('\n'); } return 0; }