为什么模运算符不能在 C 中的 printf 函数中工作?
Why isn't modulo operator working inside printf function in C?
当我删除“%97”时,代码可以正常工作并打印出预期的内容。就像如果输入是 "a" 那么它会打印 "f" 而当存在模 97 并打印空格时它不起作用。
这个问题背后的原因是什么?如何解决?
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"。请解释。
我想你想写:
(s[i] + 5) % 97
你写的表情:
s[i] + 5 % 97
等同于:
s[i] + (5 % 97)
即运算符%
的优先级高于+
.
您正在将 5 % 97
添加到代码中的 s[i]
,即 5。
当我删除“%97”时,代码可以正常工作并打印出预期的内容。就像如果输入是 "a" 那么它会打印 "f" 而当存在模 97 并打印空格时它不起作用。
这个问题背后的原因是什么?如何解决?
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"。请解释。
我想你想写:
(s[i] + 5) % 97
你写的表情:
s[i] + 5 % 97
等同于:
s[i] + (5 % 97)
即运算符%
的优先级高于+
.
您正在将 5 % 97
添加到代码中的 s[i]
,即 5。