파일이나 키보드에서 입력을 읽는 프로그램이 있습니다. 입력을 파일 또는 키보드에서 삽입해야하는지 여부를 결정하는 방법을 찾았습니다.표준 입력 또는 파일 입력 C
각 유형의 입력에 대해 코드를 2 번 복사하지 않으려면이 결정을 쉬운 방법으로 구현해야합니다.
나는 벨로우즈 코드와 같은 것을 시도했지만 입력 파일 (arv == 1)에 대해서만 작업했지만 stdin에서 세그먼트 오류가 발생했습니다. 이 작업을 수행 할 수있는 빠른 방법이 있나요
FILE *fp;
if (arg = 1)
fp = fopen (operationfile, "r");
else
fp = stdin;
while (fgets(buffer, sizeof(buffer), fp) != NULL)
:
오류 인수 == 0
(_IO_fgets (buf=0xbffffaac "\030\031\023", n=100, fp=0x0) at iofgets.c:52)
코드에 대한 디버깅 후?
함수 호출이 실패 할 가능성이있는 경우 항상 반환 값을 확인하십시오. 'fopen() '과 같은 I/O 함수는 특히 실패에 노출되어 있습니다. 반환 값을 확인하는 것이 적절하지 않은 경우는 거의 없습니다. 이 경우 신비한 세그 폴트가 아닌 오류 케이스에서 파일을 열지 못했음을 감지 할 수 있습니다. –
표준 입력과 명명 된 파일 모두에 대해 동일한 코드를 사용할 수 있도록 코드를 작성하는 것이 좋습니다. 파일 스트림을 전달하는 함수 (그리고 오류 메시지를 생성해야하는 경우 파일 이름)에 읽기 코드를 넣는 것이 종종 적절합니다. 이렇게하면 코드를보다 쉽게 일반화 할 수 있습니다. –
main()에 대한 서명은 명령 행 매개 변수가있을 때 :'int main (int argc, char * argv [])'C에서'argc' 매개 변수는 결코 작지 않습니다 1. 왜냐하면'argv [0] '는 프로그램 실행 파일을위한'path/name'을 포함하고있는 char 문자열에 대한 포인터입니다. 하나의 명령 행 매개 변수를 가지려면'argc'의 값은 2가 될 것이고 매개 변수는'argv [1]'에서 char 문자열에 대한 포인터로 사용 가능할 것입니다. – user3629249