2017-05-23 61 views
2

當我刪除「%97」時,代碼工作並打印出預期內容。就像輸入是「a」那麼它打印「f」,而當模97存在並打印空白時它不起作用。爲什麼在C中的printf函數不是模運算符?

這個問題背後的原因是什麼?如何解決它?

int main(void) 
    { 
     char *s = get_string(); 
     for(int i = 0; i<strlen(s); i++) 
     printf("this is %c", (s[i]+5%97)); 
    } 

編輯:添加括號即改變我的最後一行「(S [I] 5)%97」爲預期程序不工作後專家。輸入「a」時,輸出應該是「f」,但是它是空格。

進入「A」後,我得到「F」!發生了什麼?此程序旨在將「a」轉換爲「a + 5」,但將「A」轉換爲「A + 5」。請解釋。

+0

你擁有的是[i] +(5%97)'。你想要'(s [i] +5)%97',我想。 –

+0

我想你應該嘗試使用括號,像這樣'printf(「this is%c」,((s [i] +5)%97));' – Darkpingouin

+0

瞭解運算符優先級 –

回答

7

我想你想寫:

(s[i] + 5) % 97 

你寫的表達:

s[i] + 5 % 97 

是一樣的:

s[i] + (5 % 97) 

也就是說,運營商%有比+更高的優先級。

您正在添加5 % 97這就是你的代碼中的到s[i]

+0

Neroku感謝您的迴應。我已經改變了代碼爲「(s [i] + 5)%97」仍然在輸入「a」打印「這是(空白)」 而在輸入「A」它正在打印「F」 是不是正在發生?因爲對於A的ASCII碼是65,而對於ASCII的ASCII碼是97.我希望這個程序轉換「a」到「a + 5」,即「f」 –

+0

ascii碼中'A'的值是65,然後是(65 + 5)%97 = 70,這是'F'的值。'a' (值97),然後(97 + 5)%97 = 5。5的值不對應'f' –

+0

@ChandramauliGupta然後刪除模操作 –

相關問題