int main() { char t = 0; int red; printf("enter char : "); red = scanf("%c", &t); while (red==1) { printf("OK\n"); printf("enter next char : "); red = scanf("%c", &t); } printf("END\n"); return 0; } q를 입력했을 때 생각한 결과는 enter char : q OK enter next char : 이건데 while문 안에 있는 scanf가 입력을 한번 건너뛰더라고요. q를 한번 입력했더니 결과로 enter char : q OK enter next char : OK enter next char : 이렇게 나왔습니다 왜 입력을 건너뛴건가요??
char ch; ch = getchar(); while (ch != '\n') { putchar (ch); ch = getchar (); } putchar (ch); 위쪽에 있는 ch = getchar();를 통해 qwer의 문자를 입력 받았다고 하면 putchar()에서 한문자씩 출력이 되서 처음에는 q값이 출력이 되면 그 다음 코드인 ch = getchar();를 만나는데 여기서 다시 ch의 값을 다시 입력해줘달라는 코드 아닌가요? 처음 ch = getchar();에서는 입력을 받았는데 왜 while문 안에있는 ch = getchar();에서는 입력을 다시 안하는 건가요??
대소문자 교환 문제에서 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를 사용하면 소문자는 잘 바뀌는데 대문자가 소문자로 변하질 않네요... 이유가 뭘까요?ㅠㅠ
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한다고 생각하는데 맞나요?
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(); 을 통해 입력을 받는다고 이해했습니다. 우선 이 과정이 맞게 이해한 건지 궁금합니다. 그리고 또 궁금한 것은 하나의 프로그램에서 버퍼는 오직 하나만 존재하는 것인가요?
안녕하세요 선생님! 강의를 따라하던 도중 itoa 함수에 오류가 떠서 질문드립니다. 분명 선생님과 똑같이 친 것 같은데 왜 오류가 날까요?? 뭐가 문제일까요...???? 어떻게든 고쳐보려고 오류 나온 문구를 구글링 해보니까 itoa함수가 표준함수가 아니라서 오류가 난다는데...ㅜㅜ 솔루션 보니깐 그냥 sprintf라는 함수를 사용하라 하더라구요.. 아니면 itoa 함수를 직접 정의하라던데 아직 걸음마 걷는 입장에서는 그 방법이 도저히 이해가 안가서.. 해결책이 궁금합니다ㅜ
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로 값이 다르더라고요. 문자를 입력하면 뒤에 변수에도 영향을 주는거 같은데 확실하지 않아서 질문드립니다.
먼저 항상 특별한 강의 잘 듣고있습니다. 감사합니다. 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시에 다르게 느껴져서요.
작성된 코드문 주석 중, 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]은 배열의 기능을 하는 것이 아닌, 그저 작성된 이름에 불과해야 하지 않나요?
6.18 강의 중 3분 25초에 int result 를 1로 초기화 하셨는데, 강의에서 나온 코드와 똑같이 만들고 result를 0으로 초기화 하여 빌드했을때는 오류가 났지만 1로 초기화 했을 때에는 컴파일에 성공하였습니다. 왜 result를 1로만 초기화 했을 때 컴파일 성공이 되는지 궁금합니다. 감사합니다.