이것은 내 파일의 내용입니다
2
00000100+10000001
기본적으로 내가 원하는 것은 2에서 int로 읽고 다음 두 개의 0을 문자로 읽는 것입니다. 내 코드는 (복사하여 붙여 넣을 수 있지만 vi에서 메모장으로 어떻게하는지 모르겠습니다 ( https://stackoverflow.com/questions/26173704/how-to-copy-and-paste-to-another-application -linux-shellvim에서 )
암호:
int main(void)
{
int times;
scanf("%d",×);
printf("Number of times=%d ",times);
char num1;
scanf("%c",&num1);
char num2;
scanf("%c",&num2);
int n = num1=='0'?0:1;
int n2 = num2 == '0'?0:1;
printf("The next two digits are %d and %d\n",n,n2);
return 0;
}
프로그램이 잘 컴파일되었고 gcc에서 실행 파일을 만들 수있었습니다. 그리고이 프로그램을 실행하고 표준 입력을 파일로 리디렉션 한 결과는 실행 파일이있는 첫 번째 파일 리디렉션 명령입니다.
$ ./a.out < input.txt
그 결과 :
Number of times=2 The next two digits are 1 and 0
두 가지가 올바르게 인쇄됩니다. 그래도 다음 숫자가 왜 1인지 이해가 안 돼요. 내 이해 scanf
에서 다음 문자가 '0'인 것을 보지 못 합니까? 아니면 그것을 차단하는 다른 것이 있습니까? 결국 내가 원하는 '0'문자를 얻습니다. 1이 출력되는 이유를 아는 사람이 있습니까? 내가 코딩 한 방식 (나쁜 디자인이라는 것을 안다)에서 '0'이 아닌 모든 문자는 해당 int를 1로 설정합니다. 나는 단지 어떤 요소가이 문제를 일으키고이 문제를 피하는 방법을 알고 싶습니다.
인식하지 못할 수도 있지만 개행 문자 는 문자입니다.
그래서 num1
으로 도착 '\n'
하고 시험 (때문에 num1 == '0'
) 공백을 확인하지 않습니다 n
1이 ..
%c
scanf에서 공백을 접두사로 지정하여이를 방지 할 수 있습니다 . 이것은 scanf가 공백을 무시하도록 강제합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다