programing

scanf()와 fgets()의 차이

javamemo 2023. 11. 1. 21:56
반응형

scanf()와 fgets()의 차이

나는 무엇이 다른지 알고 싶습니다.fgets()그리고.scanf(). 저는 C를 저의 플랫폼으로 사용하고 있습니다.

여러 가지 차이점이 있습니다.두 가지 중요한 사항은 다음과 같습니다.

  • fgets()열려있는 파일에서 읽을 수 있지만,scanf()표준 입력만 읽습니다.
  • fgets()파일에서 '텍스트 줄'을 읽습니다.scanf()를 사용할 수 있지만 문자열에서 내장된 숫자 형식으로의 변환도 처리합니다.

많은 사람들이 사용할 것입니다.fgets()한 줄의 데이터를 읽고 사용하다sscanf()해부를 하기 위해서요

int scanf(const char * restrict format, ...);

scanf(3)stdin이라고 알려진 주어진 입력에서 format 인수로 정의된 특정 패턴을 검색합니다. 여기서 패턴은 사용자에 의해 정의됩니다.변형(scanf, fscanf, sscanf, vsscanf, vsscanf, vfscanf)에 따라 scanf(3)에 대한 지정된 입력은 문자열 또는 파일일 수 있습니다.

char *fgets(char * restrict str, int size, FILE * restrict stream);

fgets(3)는 입력 파일 스트림에서 한 을 읽고 바이트를 null 종단 문자열로 버퍼 스트랜드에 복사하여 버퍼에 출력을 크기가 지정된 바이트로 제한합니다.

스캔프는 경계 검사를 수행하지 않습니다.fgets가 더 나은 선택이 될 것 같습니다.그런 다음 sscanf()를 사용하여 평가할 수 있습니다.

여기서 주제에 대한 좋은 토론 - http://cboard.cprogramming.com/c-programming/109243-scanf-vs-fgets.html

scanf를 사용하여 공간을 입력하려면 어떻게 해야 합니까?(이것을 잊어버린 나의 사악한 쌍둥이는 내가 아니라)

주의해야 할 점은scanf패턴 사양에 필드 폭 제한 허용:

scanf( " %80s", mybuffer );

그런데 어디서printf()폭을 변수로 전달할 수 있습니다('*' 포함).

printf( "My name is %*s.\n", 20, name );

scanf()그렇지 않습니다. ('*'를 필드를 완전히 억제/무시하는 플래그로 해석합니다.)그 말은 결국 이런 짓을 하게 된다는 뜻입니다.

#define NAMEWIDTH 40
char buffer[ NAMEWIDTH + 4 ];
...
scanf( " %40x", buffer );

필드 너비 40을 연결할 방법이 없습니다.scanf()버퍼 선언에 버퍼 폭 40을 포함합니다.

scanf는 읽은 문자열(또는 만든 문자열)을 구문 분석하고 열린 파일*에서 한 줄을 읽습니다.아니면 fscanf?

주요 차이점은 읽을 수 있는 문자의 수에 제한이 없는 반면(기본 사용 시) 읽을 수 있는 문자의 수가 최대라는 점입니다.

두 기능의 프로토타입 참조:

char * fgets (char * dest, int size, FILE * stream);

int scanf (constchar * 형식, ...);

다음의 두 번째 매개 변수는fgets최대 크기의 char를 읽도록 강요합니다.

또 다른 분명한 차이는 반환 값입니다. 성공 시 포인터를 반환하고 성공적으로 일치 및 할당된 입력 항목 수를 반환합니다.그러면, scanf 함수는 포맷에 따라 입력을 스캔하고, 표준 입력 스트림 stdin으로부터 입력을 읽어내는 동안,fgetsFILE * 스트림의 입력을 기본값으로 읽습니다.

결론적으로, 당신은 당신이 사용할 수 있습니다.scanf파일에서 데이터를 읽고 고정 크기 배열에 삽입하는 것(예를 들어)은 그다지 의미가 없습니다.의 장점scanf는 출력 데이터의 포맷입니다. 함수가 다음을 읽는 경우12345\n, 산출량은12345, 물건들이 읽고 돌아오는 동안에\n(included), a 추가\0결국은 스트링 터미네이터로서 말입니다.

언급URL : https://stackoverflow.com/questions/1252132/difference-between-scanf-and-fgets

반응형