PL40 scanf 사용시 버퍼에 남은 linefeed 처리 scanf 사용시 버퍼에 남은 linefeed 처리 3 a 위와 같은 인풋을 아래의 scanf로 받는다고 하자. scanf("%d", &num); scanf("%c", &ch); 결과는 str에 a 캐릭터가 들어가지 않고 빈 문자열이 들어간다. scanf가 3을 받고나서 버퍼에 \n가 남아있는 상태가 되고, 두번째 scanf가 \n을 받고 끝내버리기 때문이다. 이를 방지하기 위해서는 캐릭터를 입력받는 scanf의 포맷스트링 앞에 ' ' 공백을 추가해주면 된다. scanf(" %c", &ch); 버퍼 앞의 공백, \n, \t가 모두 무시된다. PL/C++ 2022. 7. 14. 우분투에서 scanf()로 EOF 입력하기/받기 우분투에서 scanf()로 EOF 입력하기/받기 scanf() 함수로 EOF 받기 입력값의 길이를 모르고 형식만 알 때, 예를 들어 아래와 같이 정수 3개가 공백 간격으로 t번 반복된다고 하자. 1 2 3 3 4 5 ... 3 3 2 t번을 알 수 없을 때, scanf를 while문 안에 넣어 EOF를 탐지할 수 있다. while(scanf("%d %d %d", &a, &b, &c)!=EOF) { // 대충 a, b, c로 무언가 하는 코드 } 우분투 콘솔에서 EOF 입력넣기 Ctrl+d를 두 번 입력해주어야 한다. tmux 사용 시에는 shell exit을 일으킬 수 있다. PL/C++ 2022. 6. 29. 포인터변수의 이해와 주소연산자 포인터변수의 이해와 주소연산자 엠퍼센드 연산자의 용례 엠퍼센드 연산자는 아래의 3가지로 쓰인다. & bitwise and 연산자로서 사용 주소연산자로 사용 int* ptr = &b; (주소를 리턴하는 연산자) 레퍼런스변수로서 사용 이중 두 번째 주소연산자로서 사용하는 경우를 알아보자. 포인터와 &의 사용 포인터는 주소값을 저장하는 변수고, &는 주소값을 리턴하는 연산자다. #include int main() { int val = 10; int* ptr; ptr = &val; // 포인터는 주소값을 저장하는 변수 } 포인터 변수를 선언할 때 int*등을 쓰는데, 이때의 int는 변수의 자료형이 int라는 뜻이 아니라, 포인터 변수의 주소가 가리키는 값이 해당 자료형이다라는 뜻. PL/C++ 2022. 6. 28. 배열과 포인터의 공통점과 차이점 배열과 포인터 배열과 포인터는 표현에서 비슷한 점이 많다. 배열 표현식과 포인터 표현식을 interchangably 쓸 수 있다. #include int main() { int val = 10; int* ptr; int arr[3] = {1,2,3}; ptr = &val; // arr = &val; // 얘는 안된다. arr변수는 '배열'로 선언되었기 때문. // 한번 세팅하면 주소값을 바꿀 수 없는 const pointer와 비슷한 느낌? printf("ptr value: %x\n", ptr); // 주소값 printf("ptr pointer: %d\n\n", *ptr); // 10 printf("ptr[0]: %d\n", ptr[0]); // 포인터를 배열처럼 printf("*(arr+.. PL/C++ 2022. 6. 28. 이전 1 2 3 4 다음