문제는 scanf 다음에 fgets()/gets()/scanf()가 오면 작업 또는 출력이 무엇인지 나타냅니다.
fgets()/gets() 다음에 scanf()
예시
#include<stdio.h> int main() { int x; char str[100]; scanf("%d", &x); fgets(str, 100, stdin); printf("x = %d, str = %s", x, str); return 0; }
출력
Input: 30 String Output: x = 30, str =
설명
fgets() 및 gets()는 런타임에 사용자로부터 문자열 입력을 받는 데 사용됩니다. 나는 위 코드를 실행할 때 정수 값을 입력하면 문자열 값을 사용하지 않을 것입니다. 왜냐하면 정수 값 뒤에 개행 문자를 주었을 때 fgets() 또는 gets()는 "문자열"이라는 원하는 입력 대신에 개행 문자를 입력으로 사용하기 때문입니다. .
scanf() 다음에 scanf()
scanf() 다음에 scanf()를 반복적으로 얻으려면 루프를 사용할 수 있습니다.
예시
#include<stdio.h> int main() { int a; printf("enter q to quit"); do { printf("\nenter a character and q to exit"); scanf("%c", &a); printf("%c\n", a); }while (a != ‘q’); return 0; }
출력
Input: abq Output: enter q to quit enter a character and q to exita a enter a character and q to exit enter a character and q to exitb b enter a character and q to exit enter a character and q to exitq
설명
여기에서 우리는 추가 줄 바꿈 다음에 '문자를 입력하고 종료하려면 q'라는 추가 줄을 볼 수 있습니다. 이것은 scanf()가 버퍼에 줄 바꿈 문자를 남길 때마다 다음 scanf()에 의해 읽혀지고 있기 때문입니다. . 이 문제를 해결하려면 scanf("%c\n"); 또는 다른 옵션은 추가 getchar() 또는 scanf()를 사용하여 추가 새 줄을 읽을 수 있다는 것입니다.