2016-12-01 44 views
1

我有一個這樣的代碼中存在的元素:帕斯卡爾 - 發現如果在一組

program Project1; 
uses crt; 
type alph=set of 'A'..'Z'; 
var mn:alph; 

begin 
    clrscr; 
    if ('A' in mn) then writeln('Yes'); 
    readln; 
end. 

它不打印任何東西,它會引發一些問題: project1.lpr(11,14)警告:變量「mn」似乎沒有被初始化 我不明白爲什麼,有什麼問題嗎?

+0

錯誤消息意味着它說。直到你把任務交給'mn',你不應該認爲它有任何特殊的價值。 – MartynA

回答

4

聲明

type 
    Alpha = set of 'A'..'Z'; 

簡單地說,Alpha是允許包含字母的零個或多個AZ包容性之間的類型。這並不意味着該類型的變量會自動包含該集合的每個元素;它只是表示該變量將由該範圍內的一組字符組成。

var 
    mn: Alpha;    // Uninitialized variable that can contain 
          // characters between 'A'..'Z'. 
begin 
    mn := ['A'..'Z'];   // Valid set of every member 
    mn := ['A', 'C', 'X']; // Valid set of three members 

編譯器正確地告訴你,你有沒有分配任何價值mn,因此,您使用的是未初始化的變量。

順便說一句,大多數帕斯卡方言的標準約定是用T來表示類型,以便清楚它是一種類型。所以,考慮到這一點,以下是您所發佈的包含該更正的代碼的工作版本。

program Project1; 

uses 
    crt; 

type 
    TAlpha=set of 'A'..'Z'; 

var 
    mn: TAlpha; 
begin 
    clrscr; 
    mn := ['A'..'Z']; 
    if ('A' in mn) then 
    Writeln('A is in mn'); 
    { 
    My preference to the if statement above - prints true or false 
    depending on whether the character is in the set, so you get output 
    either way. 
    } 
    WriteLn('A in mn: ', ('A' in mn)); 
    Readln; 
end. 

爲了解決您的附加問題(從下面的評論):

要檢查字符串是否所有字符是數字(「0」 ..「9」),你可以這樣做這:

function IsNumeric(const str: string): Boolean; 
var 
    i: Integer; 
begin 
    Result := True; 
    for i := 1 to Length(str) do 
    if not (str[i] in ['0'..'9']) then 
     Result := False; 
end; 
+0

不錯的代碼..以及如果我有一個由隨機字符組成的字符串f.e.它可以是「a2es0」,我需要檢查這個字符串是否只包含數字(對於這個字符串會返回False),並且我想在**運算符中使用**來實現,所以像 '對於i:= 1到5如果沒有(str [i]在['0'..'9']開始 然後做一些事情...... ' 我可以運行它嗎? – sliziky

+0

是的,你可以運行它。你自己找出來,你知道嗎?:-)如果str [i]不在['0'..'9']中,DoSomething;結束;'。 –

+1

@Ken:你不是指'如果不是(str [i]在['0'...'9'])''? +1爲好答案btw。 – MartynA

0

不,到目前爲止沒有錯。但是,正如警告所述,nm未初始化。你會遇到未定義的行爲(我不確定這是否可能在Pascal中實現),或者代碼片段沒有任何用處 - 你想檢查mn是否包含'A',但是沒有將任何東西放入mn

+0

嗯,我認爲毫米將像數組填充值從a到z ...如何檢查是否字母是char?謝謝 – sliziky