2015-05-09 43 views
0

我想從用戶那裏得到一個輸入,例如(4,5)。但我只想得到整數值。(4和5)我爲此編寫了一個代碼。但它沒有工作。如何修復問題。我怎樣才能從tupple得到數字?

int x, y; 
int c; 

c = getchar(); 
while (c != EOF) { 
    while (c != '(' && c != EOF) { 

     c = getchar(); 

    } 
    while (c != ',' && c != EOF) { 

     c = getchar(); 

    } 
    x = c; 

    while (c != ',' && c != EOF) { 

     c = getchar(); 

    } 
    while (c != ')' && c != EOF) { 

     c = getchar(); 

    } 
    y = c; 
} 

我得到輸入(1,4)。輸出是x= 44y= 45

+0

您應該將此標記爲C而不是C++。 –

+0

哪種類型是'c'?將'char'轉換爲'int'使用其ASCII碼。 – rpsml

+0

順便說一句,'我爲此編寫了一個代碼,但它沒有工作,我該如何解決這個問題.'是一種說法「我的代碼不工作,請爲我調試」的不同方式,根據一個非常具體的類別來解決這些問題。 –

回答

1

找到左括號後,在數字爲數字的同時閱讀字符(請參閱,例如isdigit),然後創建您的號碼。

當角色不是數字時,確保它是逗號。如果是這樣的話,你可以像上面一樣閱讀下一個數字。最後確保你得到了右括號。

上面假設括號和數字之間或數字或逗號之間不存在空格。這些可以通過循環和isspace來處理。


至於轉換位數號碼,假設你的系統使用的是ASCII encoding(這是對現代PC的系統標準),那麼它很容易,因爲你只是減去'0'從字符得到數字(見鏈接ASCII table來幫助你理解爲什麼)。將值存儲在變量中,初始化爲零,並根據需要乘以10。


取決於你正在寫解析器,你可以做的元組的處理和識別的解析器,而不是詞法分析器。這會使它更加靈活。

0

請按照您的代碼流x值將字符逗號。 int c,x,y; c = getchar(); while(c!= EOF){

while (c != '(' && c != EOF) { 

     c = getchar(); 

    } 

    c = getchar(); 
    x = c; 

    while (c != ',' && c != EOF) { 

     c = getchar(); 

    } 

    /*x = c; 

    while (c != ',' && c != EOF) { 

     c = getchar(); 

    } 
    */ 

    c = getchar(); 
    y = c; 

    while (c != ')' && c != EOF) { 

     c = getchar(); 

    } 
    //y = c; 

    printf("x = %c ,y = %c ",x,y); 
}