월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C언어
scanf("%[^\n]%*c) 질문
char test[20]; scanf("%[^\n]", test); 다름이 아니라 *c의 뜻이 \n을 지우라는 뜻인데 *c가 없어도 \n이 지워져서 test 저장됩니다. 이거 제가 뭔가를 착각하고 있는건가요?
- 해결됨홍정모의 따라하며 배우는 C언어
입력버퍼의 초기화 방법 질문입니다.
수고많으십니다. 제목대로 입력 버퍼의 초기화에 대해서 궁금증이 있어 질문 올립니다. #include <stdio.h> int pow(int base, int exp); int main() { int base, exp, q = 2; while (q == 2) { printf("Base and Exp : "); q = scanf("%d %d", &base, &exp); if (q != 2) { printf("Worng enter\n\n"); rewind(stdin); //while (getchar() != '\n'); q = 2; continue; } printf("%d exp %d : %d\n\n", base, exp, pow(base, exp)); } return 0; } int pow(int base, int exp) { int result = 1; for (int i = 0; i < exp; ++i) result *= base; return result; } 이번 강의의 예제를 나름대로 만들어 보았습니다. 저는 입력 버퍼로 인한 오류를 많이 격어서 입력 버퍼를 초기화하는 방법을 찾아보다 rewind(stdin);를 발견하여 사용했습니다. 그런대 강의 커뮤니티의 질문들을 살펴보니 대다수가 버퍼 초기화에 while (getchar() != '\n');를 사용하고 있었습니다. (참고로 전 아직 이 강의까지만 수강했습니다.) 요점은 rewind(stdin); 와 while (getchar() != '\n'); 의 기능적인 차이가 있는지, rewind(stdin);을 사용할때 위험성이 있는지 알고 싶습니다. 답변 부탁드립니다.
- 미해결홍정모의 따라하며 배우는 C언어
9.1 질문드립니다
안녕하세요! 오류가 나서 계속 헤매다가 이렇게 질문드립니다ㅠㅠ 9.1 강의에 나오는 코드 중에서(해당 코드 타임라인 21:35 ~ 23:05) 아래와 같이 강의내용과 동일하게 코드를 입력했는데 이런 오류가 떠서 질문 드립니다 봐주셔서 감사합니다ㅠㅠ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdbool.h> #define WIDTH 30 #define NAME "Jeong-Mo Hong" #define ADDRESS "Seoul, Korea" void print_multiple_chars(char c, int n_stars) { for (int i = 0; i < n_stars; ++i) printf("%c", c); } void print_centered_str(char str[]) { int n_blanks = 0; n_blanks = (WIDTH - strlen(str)) / 2; print_multiple_chars(' ', n_blanks); printf("%s\n", str); } int main() { int n_blanks = 0; print_multiple_chars('*', WIDTH); printf("\n"); print_centered_str(NAME); n_blanks = (WIDTH - strlen(ADDRESS)) / 2; print_multiple_chars(' ', n_blanks); printf("%s\n", ADDRESS); //printf(" %s\n", ADDRESS); print_multiple_chars('*', WIDTH); return 0; }
- 미해결홍정모의 따라하며 배우는 C언어
selectionSort 함수구현 1시간걸림
void swap(int* xp, int* yp); void printArray(int arr[], int size); void selectionSort(int arr[], int n); int main() { int arr[] = { 64, 25, 12, 22, 11 }; int n = sizeof(arr) / sizeof(arr[0]); selectionSort(arr, n); // ascending order printArray(arr, n); return 0; } void swap(int* xp, int* yp) { int save = *xp; *xp = *yp; *yp = save; } void selectionSort(int arr[], int n) { while (n) { int i = 1; int* min_idx = arr; while (i < n) { min_idx = (*min_idx < *(arr + i)) ? min_idx : &arr[i]; i++; } swap(arr, min_idx); arr++; n--; } } void printArray(int arr[], int size) { for (int i = 0; i < size; i++) printf("Sort = %d\n", arr[i]); } 코드 안보고 나름 깔끔하게 해봤습니다. 한시간걸렸네요. 확실히 전 강의에서 strlen()함수부터 strpbhr(), strstr()까지 직접 구현해보면서 공부해보니 나름 정리가 되는 느낌이네요. 삼항연산자 처음에 배운 뒤로 잘 쓴 적 없어서 복습겸 넣어봤습니다. 최솟값 등을 구할 때 제일인 것 같아서요. 최대한 포인터를 이용하려고 했고, 결과물은 잘 나온 것 같아요. 좋은 코드가 아니라면 피드백 부탁드립니다.
- 해결됨홍정모의 따라하며 배우는 C언어
VS code int type의 pointer의 size는 8 byte
10:30분쯤 코드강의에서 포인터로 선언된 변수의 size는 컴파일러에 따라 런타임시에 결정된다고 보았습니다.VS code에서 아래와 같이 작성하면 int의 sizeof는 4 byte인데int type의 pointer의 size는 8 byte입니다.4byte라면 int type이니까 그런가보다 할거 같은데왜 gcc에서의 int type pointer size는 8 byte일까요?
- 미해결홍정모의 따라하며 배우는 C언어
함수 구현 질문
인터넷에서 찾아보던 중 char* my_strcpy(char* destination, const char* source); 을 프로토타입으로 쓰는 함수가 있었는데, 제가 기억을 못하는 것 같아서 질문드립니다. 보통 저희는 포인터로 받더라도 함수 프로토타입중 매개변수에만 에스테리크를 붙이곤 했는데 함수 자료형에다 에스테리크를 붙이는 경우를 처음 보는 것 같아서 질문드려요.. 어떤 의미인가요? 어떨때 붙이는거고 어떨 때 붙이지 않는건가요.. 그리고 if (*(const unsigned char*)X > *(const unsigned char*)Y) return 1; if (*(const unsigned char*)X < *(const unsigned char*)Y) return -1; if (*(const unsigned char*)X == *(const unsigned char*)Y) return 0; 이거는 strcmp 함수 알아보다가 발굴해낸건데 *(const unsigned char*) 의 뜻을 모르겠네요. X는 당연히 비교인수 넣는 parameter구요., (const unsigned char)으로 casting해서 아스키코드로 전환하는 것 까진 아는데 왜 굳이 char* 에다 괄호 앞에다가도 *를 한지 모르겠네요. 이건 코딩스타일인가요? 코딩스타일이면 (const unsigned char*)*X 랑 똑같은 의미를 가진다고는 이해 할 수 있는데 굳이 casting해주는 곳 까지 에스테리크를 넣는 이유를 모르겠습니다.. 기초적인 질문 죄송합니다.. 아직 좀 헷갈리는 단계네요ㅜㅜ
- 미해결홍정모의 따라하며 배우는 C언어
이진수 변환예제 작성한 코드 질문
#include <stdio.h> #define NUM 10 void print_binary(unsigned long n); void print_binary_loop(unsigned long n); int main() { print_binary_loop(NUM); print_binary(NUM); printf("\n"); return 0; } void print_binary_loop(unsigned long n) { long arr[NUM]; int i = 0; while (1) { arr[i] = n % 2; n /= 2; if (n == 0) break; i++; } for (int j = 0; i >= j; i--) { printf("%d", arr[i]); } printf("\n"); } void print_binary(unsigned long n) { if (n != 0) print_binary(n / 2); if (n != 0) { printf("%d", n % 2); } } 이전 강의에서 배열을 교수님께서 조금 다뤄주신 것 같은데 제가 작성한 코드가 맞는지 궁금합니다. 이렇게 코드 짜면 혹시 문제가 있을까요? 실행이 되고 제가 발견할 수 있는 오류를 찾지 못하면 정답일까요? 굉장한 뿌듯함과 약간의 의구심으로 질문드립니다.
- 미해결홍정모의 따라하며 배우는 C언어
자체적으로 strncat() 함수 구현 질문.
삭제된 글입니다
- 해결됨홍정모의 따라하며 배우는 C언어
오류가 왜 생기는지 도통 모르겠어요ㅠㅠ
#include <stdio.h> #include <stdlib.h> char get_choice(void); char get_first_char(void); int get_integer(void); void count(void); int main() { int user_choice; while ((user_choice = get_choice()) != 'q') { switch (user_choice) { case'a': printf("Avengers assembel\n"); break; case'b': putchar('\a'); break; case'c': count(); break; default: printf("Error with %d.\n", user_choice); exit(1); break; } } return 0; } char get_choice(void) { printf("Enter the letter of your choice:\n"); printf("a. avengers b. beep\n"); printf("c. count q. quit\n"); char c; while (1) { c = get_first_char(); if (c >= 'a' && c <= 'c') break; else if (c == 'q') break; else printf("Please try again.\n"); } return c; } char get_first_char(void) { char c; c = getchar(); while (getchar() != '\n') continue; return c; } int get_integer(void) { int i; while (scanf("%d", &i) != 1) { while (getchar() != '\n') continue; printf("Please try again.\n"); } return i; } void count(void) { printf("Enter an integer:\n"); int i = get_integer(); for (int j = 1; j <= i; j++) printf("%d\n", j); } 8.8 문제만들기 예제를 푸는데 count()함수를 실행시킬려고 c입력 -> 숫자 입력 -> c입력하면 get choice 함수안에 please try again이 나와요. 제가 원하는건 c입력 -> 숫자 입력-> c입력 ->숫자 입력인데 디버그하고 F10 누르면서 오류 찾을려고 용을 써도 F10누르면 생기는 화살표가 갑자기 없어지더라고요.ㅠㅠㅠㅠ 오류를 스스로 못찾으니 분한마음이 느껴지지만.. 흑흑 부탁드립니다.
- 미해결홍정모의 따라하며 배우는 C언어
맨 위에 scanf받고 gets가 실행 안되는 이유 질문
char name[128]; int result = scanf("%s", name); char words[STRLEN] = ""; gets(words); 1. 이렇게 됐을 때 에러뜨면서 컴파일 실행이 안되는데 이유가 뭔가요? 예전에 getchar 쓸 때도 scanf가 위에 있으면 컴파일 못 읽는 현상 나왔던 것 같은데.. 그냥 함수의 기능만 하는거면 상관없지 않나요? 뭔가 충돌이 되는건가요? 2. 그리고 buffer는 전 강의와 관련지었을 때 어느 메모리에 위치하고 있나요? TEXT Segment? gets(word)에서 word[5] 일때 helloo 를 입력하면 run-time error가 걸리는데 메모리 관점에서 권한을 주지 않은 곳을 접근하거나 읽기전용의 data를 수정하려드니 해킹하지말라고 운영체제가 차단시키는 걸로 인지하고 있습니다. 근데 gets는 buffer에 저장된 것들을 읽는 거니까 그럼 buffer는 TEXT Segment 또는 그 안의 read only data에 위치하는 건가 궁금하네요. 근데 쓰다보니 beffer는 소모성이라 읽고나면 날라가니까 text segment에 저장되어있지 않을 것이라고 생각은 드네요?
- 미해결홍정모의 따라하며 배우는 C언어
이 강의 듣는데 3시간 30분 걸림
최곱니다.
- 해결됨홍정모의 따라하며 배우는 C언어
11:47 4byte int 양수부분 오타 있습니다.
2,147438,647 -> 2,147483,647
- 해결됨홍정모의 따라하며 배우는 C언어
while 문의 expression 관련
while ((ch = getchar()) != '\n') 을 while ((ch = getchar() != '\n')) 로 잘못 작성 하였는데요, 프로그램은 실행 되었지만 숫자, 대소문자를 입력 후 변환되지 않고 끝나버렸습니다. 두번째 while 문과 같이 작성하고 debugging을 해보면 ch : '\0'에서 while 문 실행 후 ch: '\x01'로 입력을 받습니다. 두번째 while 문과 같이 작성하면 어떻게 작동 되는건지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C언어
3차원 배열
int arr_3d[2][3][4] = { { {000,001,002,003}, {010,011,012,013}, {020,021,022,023}, }, { {100,101,102,103}, {110,111,112,113}, {120,121,122,123}, } }; 이거 큰묶음 2번째목록은 제대로 출력되는데 큰묶음 1번째에서 0 1 2 3 8 9 10 11 16 17 18 19 로 출력되네요 이유가 뭘까요
- 해결됨홍정모의 따라하며 배우는 C언어
실수 입력시 어째서 이런 결과가 나오는 것인지 모르겠습니다.
#include <stdio.h> int main() { char c; int sum = 0; int n = 0; int status = 1; while (status == 1) { printf("Enter an integer(q to quit) : "); status = scanf("%d", &(int)n); if (status != 1) { scanf("%c", &c); if (c == 'q') break; printf("Worng enter\n"); status = 1; continue; } sum += n; } printf("Sum = %d\n", sum); return 0; } 제가 이 코드를 작성하여 'q'입력시에만 루프를 취소하고 다른 문자에 경우는 루프를 계속 실행하게 만드는것은 성공하였습니다. 하지만 정수나 문자가 아닌 실수를 입력하였을때 도무지 이해가 가지않는 현상이 발생하였습니다. 디버그를 했을때 status값은 1 그대로이고 혹시나 하여 scanf의 대입변수에 (int)까지 붙었음에도 이런결과가 나오는 이유를 모르겠습니다. 답변 부탁드립니다.
- 미해결홍정모의 따라하며 배우는 C언어
교수님! illegal digit '8' for base '8'라고 에러가 발생합니다.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int won = 0; int dollar = 0; printf("Input won\n"); scanf("%d", &won); dollar = won * 0,00089; printf("Dollar = %d\n", dollar); return 0; } 교수님 안녕하세요. 위와 같이 하고 디버깅을 하면 error C2041: illegal digit '8' for base '8' 이라고 에러가 발생합니다. 물론 콘솔창도 뜨지 않습니다. 도움을 부탁드립니다 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
scanf값이 잘 안받아집니다
메뉴 입력 예제에서 처음엔 scanf가 잘 받아지는데 스위치 문을 나가고 다시 메뉴가 보이고 scanf로 다른 글자를 받아야되는데 그게 한번 건너뛰어지고 다시 menu함수가 실행되서 Enter the letter of your choice 글자가 두번 중복되는 문제가 생깁니다. 디버그 해도 원인을 모르겠는데 왜 그런걸까요?..ㅠㅠ #include <stdio.h> char input; int num; void menu() { printf("Enter the letter of your choice: \n"); printf("a. avengers\t b. beep\n"); printf("c. count\t q. quit\n"); scanf("%c", &input); switch (input) { case 'a': printf("Avengers assemble!\n"); break; case 'b': printf("\a"); break; case 'c': scanf("%d", &num); for (int i = 1; i <=num; i++) { printf("%d\n", i); } break; default: break; } } int main() { do { menu(); } while (input != 'q'); return 0; }
- 미해결홍정모의 따라하며 배우는 C언어
while문 작성시 Scanf
#include<stdio.h> int main() { const int secret_code = 337; int guess = 0; printf("Enter secret code : "); while (scanf("%d", &guess) != secret_code) { printf("Enter secret code : "); } printf("Good!"); return 0; } 전의 배운내용을 생각해서 while조건문 안에 scanf함수를 사용해보았는데 작동이 정상적으로 되질 않아요. 왜 그런건가요?
- 미해결홍정모의 따라하며 배우는 C언어
손으로 입력하기에는 버거운 상수 배열을 정의하는 방법이 있을까요?
공부를 하다보니까 python의 딕셔너리 같은 기능을 구현 하려고 시도했습니다. 상수 배열 2개를 정의 하려고 하는데 1개는 배열의 원소들이 규칙이 있어서 루프문을 통해 정의하려고 시도했지만.. 상수 배열의 원소는 변경이 안되서 잘 안되더라구요. 그래서 임시로 배열을 만들어서 루프문을 통해 배열을 만들고 나서 상수배열을 정의할때 임시배열의 이름을 가지고 할당하려고 했습니다. 그러나 이것도 컴파일자체가 안되더라구요.. 어떤 방법이 있을까요? 만들려고 시도했던 프로그램은 콘솔창에 스트링을 입력하면 그 스트링을 모스부호로 바꿔서 콘솔창에 출력해주는 것이였습니다.
- 미해결홍정모의 따라하며 배우는 C언어
6.17 강의 예제를 따라하던 중 알 수 없는 오류가 생겨 질문 드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의 는 1:1 문의하기를 이용해주세요. 저 혼자 나름대로 코딩 할 때도 size 대신 5를 입력하는 거 말고는 딱히 선생님의 코드랑 다른 것이 없었는데, 저런 오류가 뜨더라구요. 구글링도 해보고 하다가 안 되겠다 싶어서 그냥 선생님 코드랑 똑같이 작성했는데 그래도 저런 오류가 지속되고 있습니다. 이 오류가 왜 뜨는 건지 어떻게 해결할 수 있는 건지 알려주세요 ㅠㅠ.