首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

为何模运算无法输出

2013-01-28 
为什么模运算无法输出?本人刚开始自学C语言,很简单的一段代码,但被错误难倒了。。。求前辈解答,十分感谢#incl

为什么模运算无法输出?
本人刚开始自学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;
}

显示时,其他几行正常,就模运算那行只显示一个:num1
另外有两个warning:
1、warning: format '%n' expects type 'int *', but argument 2 has type 'int'
2、warning: too few arguments for format
该怎么样消除呢? div c
[解决办法]

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


[解决办法]
//字体怎么设置不对
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);

热点排行