2017-05-23 63 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然后删除模操作 –

相关问题