为什么模运算无法输出?
本人刚开始自学C语言,很简单的一段代码,但被错误难倒了。。。求前辈解答,十分感谢
#include <stdio.h>
int main(void)
{
int num1, num2;
int sum, sub, mul, div, mod;
printf("Enter num1:");
scanf("%d",&num1);
printf("Enter num2:");
scanf("%d",&num2);
if(num2 == 0){
sum = num1 + num2;
sub = num1 - num2;
mul = num1 * num2;
printf("num1 + num2 =%d\n",sum);
printf("num1 - num2 =%d\n",sub);
printf("num1 * num2 =%d\n",mul);
}
else{
sum = num1 + num2;
sub = num1 - num2;
mul = num1 * num2;
div = num1 / num2;
mod = num1 % num2;
printf("num1+num2 = %d\n",sum);
printf("num1-num2 = %d\n",sub);
printf("num1*num2 = %d\n",mul);
printf("num1/num2 = %d\n",div);
printf("num1%num2 = %d\n",mod);
}
return 0;
}
Parameters
enable
A non-zero value to enable %n support, 0 to disable %n support.
Remarks (这里解释了为什么要这样做)
printf函数在使用%n存在安全问题,所以VS08在默认的情况下禁止这样使用。因为 %n 可以停止打印,并将当前printf已打印的字符数写入一个int指针,这让printf正常情况下也能修改别的变量的值。当然这个是有安全隐患的,但错不在 %n 而是printf允许参数是字符串指针,%n只是更加方便了黑客向内存写shellcode而已。
所以 printf("num1%num2 = %d\n",mod);//%num2 有 %n
[解决办法]
//printf("num1%num2 = %d\n",mod);
//转义一下
printf("num1%%num2 = %d\n",mod);