2012-04-07 4 views
4

파스칼 형식 검사가 가능한지 궁금합니다. 나는 지금 몇 시간을 찾고 있었지만 나는 유용한 것을 찾을 수 없었다.타입 검사 중 파스칼

예 :

var 
number: Integer; 

begin 
    write('Enter a number: '); 
    read(number); 

    if {How am I supposed to check if 'number' is an Integer here?} 
    then writeln(number) 
    else writeln('Invalid input') 
end. 
+0

+1 투표는 퍼즐 조각이 누락되었음을 인식하고 IO 오류를 확인하는 방법이 있어야합니다. –

답변

3

실제로 I/O 유형 검사가 적용됩니다.

{$I-} //turn off IO checking temporarily 
read(i); 
{$I+} // and back on 

if ioresult=0 then // check the result of the last IO operation 
    writeln('integer successfully read:',number) 
else 
    writeln('invalid input'); 

참고 : 당신은 일시적으로 해제 한 후 결과를 확인하여이 문제를 해결할 수있는 일반적인 대답은 종종 "그냥 문자열을 읽고 변환 자신을"그러나없이 잘 그렇게하기가 어렵다 터미널 유형에 대한 가정을합니다.

다소 유효성이 검증 된 입력이 필요한 명확하고 간단한 프로그램의 경우 위의 트릭 (및 오류가 반복되는 루프를 둘러싼 것)이면 충분합니다.

당신이 볼
program int_check; 
uses crt; 
var n:real; 
begin 
    clrscr; 
    write('Enter a number: ');readln(n); 
    if n-round(n)=0 then write('Integer!') else write('Not an Integer!'); 
    readln; 
end. 

, 어떤 문자열, 아니 IOcheck, 그리고 양식에 맞는 없습니다 :

2

아마 Val 절차는 당신을 도울 수 있습니다. fpc에 대해서는 one입니다. 그러나 논리를 변경하여 String으로 읽고 Val을 사용하여 유효성을 검사하십시오. 샘플 here을 찾을 수 있습니다.

+0

+1 여기에 문자열을 사용합니다. – TridenT

0

numberInteger이므로 사용자가 숫자가 아닌 값을 입력하면 앱이 실패합니다. if 성명은 절대로 도달하지 않습니다.

+1

이것은 반드시 사실 일 필요는 없습니다. 그것은 대부분의 컴파일러에서 기본적으로 켜져있는 IO 검사 상태에 따라 다릅니다. –

-1

'너무 쉽다 그건, 아래에있는 내 코드를 볼!

0

사용 FRAC (n)를 직접

프로그램 int_check; crt를 사용합니다. var n : 실제; 시작 clrscr; write ('숫자 입력 :'); readln (n); frac (n) = 0이면 write ('Integer!') else write ('정수가 아님!'); readln; 종료.