Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C에서 fgets()/gets()/scanf()가 있을 때 scanf() 문제

<시간/>

문제는 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()를 사용하여 추가 새 줄을 읽을 수 있다는 것입니다.