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으로부터 입력을 읽어내는 동안,fgets
FILE * 스트림의 입력을 기본값으로 읽습니다.
결론적으로, 당신은 당신이 사용할 수 있습니다.scanf
파일에서 데이터를 읽고 고정 크기 배열에 삽입하는 것(예를 들어)은 그다지 의미가 없습니다.의 장점scanf
는 출력 데이터의 포맷입니다. 함수가 다음을 읽는 경우12345\n
, 산출량은12345
, 물건들이 읽고 돌아오는 동안에\n
(included), a 추가\0
결국은 스트링 터미네이터로서 말입니다.
언급URL : https://stackoverflow.com/questions/1252132/difference-between-scanf-and-fgets
'programing' 카테고리의 다른 글
여러 템플릿이 포함된 AngularJS 지시문 (0) | 2023.11.01 |
---|---|
WAMP 서버가 데이터베이스 파일을 저장하는 위치 (0) | 2023.11.01 |
Vue.js에서 키 입력 처리 (0) | 2023.11.01 |
jQuery를 사용하여 Ajax를 통해 체크박스 배열의 값을 보내는 방법은? (0) | 2023.11.01 |
translatable="false"가 있는 strings.xml의 "여기서 번역되지만 기본 로케일에서는 찾을 수 없습니다" 오류 (0) | 2023.11.01 |