2016-02-12 93 views
0

我正在編寫一個程序,通過字母表將某個字符串的字母旋轉一定的方向。它需要初始輸入一個整數,我將其稱爲N,然後使用該整數作爲每個字符在整個字母表中移動的字母數。一個正整數移到字母表的右側,一個負整數向左移動。例如,如果輸入的是:如何在使用scanf和'%d'時區分int和char

-2 cdefg 

輸出將

abcde 

爲了做到這一點,我需要爲了得到初始ñ常規字母字符和整數之間的不同。我已經嘗試使用scanf()與%d和isalpha()函數,以及%c和isdigit()函數,但兩者似乎對我都有障礙。爲了澄清,我只是在最初的變量N有問題。我不知道如何區分一個整數之間的'm'輸入。據我瞭解,它將存儲'm'的ASCII值爲N

+0

要讀取整數,請使用「%d」。要讀取字符,請使用「%c」。您必須事先決定是否期望閱讀其中一個或另一個。相同的字符串「2」可以被解析爲一個整數或一個字符,但是結果會非常不同。 – dxiv

回答

1
  1. 閱讀整行文本並將其存儲在數組中。你可以使用fgets或 - 如果你有 - getline爲此。
  2. 然後,您將該行上的第一個「單詞」轉換爲使用strtol的數字。它會告訴你停止解析的位置end
  3. 只要將它解除引用到空白處(可以通過isspace查看),就可以將指針前進end
  4. 現在您處於需要旋轉的第一個字符的位置。繼續直到字符串的結尾。
1

你不需要區分它們。 N總是在字符串之前,所以只需使用適當的格式讀取兩者。

scanf("%d %s", &n, string); 

要判斷用戶是否輸入了正確的輸入,請檢查scanf返回的值。它返回成功轉換的項目數量。如果用戶未首先鍵入整數,則轉換將失敗,因此它將返回0。如果用戶在字符串前鍵入有效整數,它將返回2

+0

我試圖區分** N **的不同類型的輸入。如果用戶輸入'm'而不是整數,我不知道如何區分它與常規整數。如果我使用isdigit(),它將忽略大於9的所有數字以及全部對** N **有效的負數。 – moo

+0

這隻會導致轉換失敗。檢查'scanf'的返回值。如果不是2,則意味着用戶沒有輸入正確的格式化輸入。 – Barmar