2017-10-16 1 views
1

미리 감사드립니다. 필자는 파스칼에서 프로그래밍을 시작해야하며, Java와 Python의 모든 즐거운 변화가 아니라는 것을 솔직히 말해야합니다. 나는 GCD를 반환하는 간단한 프로그램을 시도했지만, 콘솔은 readln이 끝났음에도 불구하고 열려 있지 않다. 사용중인 파스칼 알면서파스칼 - 가장 큰 공통 분모 - 출력 없음

program App1Learning; 

var 
    a, b : integer; 

begin 
    read(a); 
    read(b); 
    while a <> b do 
    begin 
    if a < b then b := b - a; 
    if a > b then a := a - b; 
    end; 
    writeln(a); 
    readln; 
end. 
+0

어디서나 writelns를 추가하여 디버깅을 시도했지만 어떻게 든 인수를 읽은 후 readln을 추가하여 문제를 해결할 수있었습니다 ...이 중 일부를 이해하지 못했습니다 ... read (a); 읽기 (b); readln; –

+0

'Read (A)'는 하나의 숫자를 읽지 만 다음 라인으로 넘어 가지 않습니다. 나는 한 줄에 하나의 숫자를 얻기 위해'Readln (A)'를 사용하고 싶습니다. 이것은 Java와는 다르지만 Java 방식이 매우 직관적이지는 않습니다. –

+1

어떤 파스칼을 사용하고 있습니까? FreePascal, Delphi, GNU Pascal, 무엇? 특히 고급 기능에는 차이점이 있습니다. –

답변

1

, 나는 Windows 용 프리 파스칼 3.0.0이 시도 :

program App1Learning; 

var 
    a, b : integer; 

begin 
    readln(a); 
    readln(b); 
    // Or, instead of the two previous lines: readln(a, b); 
    while a <> b do 
    begin 
    if a < b then b := b - a; 
    if a > b then a := a - b; 
    end; 
    writeln(a); 
    readln; 
end. 

Read()를,이 버퍼 라인 입력에 의존하면서, 캐리지 리턴을 기다리지 않습니다 , 그래서 그것은 두 개의 숫자를 읽을 것이지만 은 최종 캐리지 리턴을 소비하지 않습니다. 즉 이것은 여전히 ​​입력 버퍼에 있습니다. 프로그램이 GCD를 계산하고 표시 한 후에도 여전히 버퍼에있는 캐리지 리턴은 최종 readln에 의해 즉시 읽혀 지므로 콘솔이 바로 닫힙니다 (readln은 캐리지 리턴을 기다릴 필요가 없습니다). 이미 —이거나 여전히 버퍼에 —).

readln(a); 등을 대신 사용하면 각 번호가 자체 행에 입력되고 함수는 캐리지 리턴을 기다리고 소비합니다. 즉, 최종 readln은 입력 버퍼에서 캐리지 리턴을 찾지 않으므로 을 입력 할 때까지 기다릴 것입니다.을 입력하십시오.

+0

나는 나사로를 사용합니다. 문제는 내가 read (a, b) 또는 read (a)를 사용할 때; 읽기 (b); 콘솔이 매번 튀어 나오게됩니다. 두 경우 모두 한 줄에 입력을 넣으려고했습니다. 불운. 그러나 내가 a, b 또는 별도로 readline을 사용할 때 문제가 전혀 발생하지 않습니다. 나는 어디에서 붙잡을 지 실제로 알지 못한다. 잘못이 있었을지라도 끝에는 readln이 있습니다. 왜 그렇게 종료됩니까? 예외는 없습니다. 그냥 ... –

+0

@SamuelNovelinka : 내가 말했듯이,'Read()'를 사용하면, 새로운'Readln'에 의해 소비 될 준비가 된 버퍼에 새 라인이 남아있게됩니다. 이것은'Readln'이 당신이 enter를 누르기를 기다릴 필요가없고 콘솔 창이 즉시 닫히는 것을 의미합니다. ** 다른 말로하면,'Read'를 사용하면, 최종'Readln'은 이미 버퍼에서 캐리지 리턴을 발견하고 더 이상 기다리지 않습니다. ** –

+0

아, 알 수 있습니다. 정말 고마워. 바로 그 다음에 두 번째 readln이 트릭을 수행 할 것인가? 나는 그것이 어떻게 든 아마추어 적으로 들린다는 것을 안다, 나는 그것을 사용하려고하지 않는다. 단지 그것을 올바르게했다는 것을 확실히하고 싶다. –