| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 545 人关注过本帖
标题:关于printf() 使用时遇到的4个疑问。
只看楼主 加入收藏
小青龙
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-8-2
结帖率:80%
收藏
已结贴  问题点数:10 回复次数:3 
关于printf() 使用时遇到的4个疑问。
程序代码:
/* Demonstrateion of printf(). */ 
/* 代码是书上的代码 ,个人用的是 DEV-C ++ 编译器编写代码 */
#include<stdio.h>

char *m1 = "Binary";
char *m2 = "Decimal";
char *m3 = "Octal";
char *m4 = "Hexadecimal";

int main( void )
{
    float d1 = 10000.123;
    int n, f;
    
    
    puts("Outputting a number with different field widths.\n");
    
    /* 以下为疑问 1、2、3 的代码*/
    printf("%5f\n", d1);
    printf("%10f\n", d1);
    printf("%15f\n", d1);
    printf("%20f\n", d1);
    printf("%25f\n", d1);
    
    puts("\n Press Enter to continue...");
    fflush(stdin);
    getchar();
    
    puts("\nUse the * field width specifier to obtain field width");
    puts("from a variable in the argument list.\n");
    
    for (n=5; n<=25; n+=5)
        printf("%*f\n", n, d1);
        
    puts("\n Press Enter to continue...");
    fflush(stdin);
    getchar();
    
    puts("\nInclude leading zeros.\n");
    
    printf("%05f\n", d1);
    printf("%010f\n", d1);
    printf("%015f\n", d1);
    printf("%020f\n", d1);
    printf("%025f\n", d1);
    
    puts("\n Press Enter to continue...");
    fflush(stdin);
    getchar();
    
    puts("\nDisplay in octal, decimal, hexadecimal.");
    puts("Use # to precede octal and hex output with 0 and 0x.");
    puts("Use - to left-justify each value in its field.");
    puts("First dissplay column labels.\n");
    
    printf("%-15s%-15s%-15s", m2, m3, m4);
    
    /* 以下为疑问 4 的相关代码 */
    for (n = 1; n < 20; n++)  /* 最后一次迭代时,n 的值是 20 ,并且我觉得 n=20 一直影响到最后一条printf()语句 */
        printf("\n%-15d%-#15o%-#15X", n, n, n);

    puts("\n Press Enter to continue...");
    fflush(stdin);   /* 难道 fflush(stdin) 函数没有将 n=20 清除掉么 ??*/
    getchar();
    
    puts("\n\nUse the %n conversion command to count characters.\n");
    
    printf("%s%s%s%s%n", m1, m2, m3, m4, &n);
    
    printf("\n\nThe last printf() output %d characters.\n", n); /* 按理说,实际应该是 The last printf() output 29 characters *
                                                                 * ,书上确实也是29. 实际上编译后程序显示的是                * 
                                                                 * 20 characters ,这个 20 是和前面的 for 语句               * 
                                                                 * 中的 n < 20 是一致的,即如果改成 n < 25 后                * 
                                                                 * 也会有The last printf() output 25 characters ,为什么是这样?   */
    
    system("pause");
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
2013-08-05 01:54
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:10 
回复:
1、楼主对浮点数了解不够,建议继续查找浮点数相关资料
2、3、字段宽度是指至少XXX宽

DO IT YOURSELF !
2013-08-05 06:19
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
疑问4、 n 是循环变量  循环终止值是20  不知道他和那几个字符串长度和 有神马关系

DO IT YOURSELF !
2013-08-05 06:21
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
测试printf究竟打印了几个字符  可以用如下代码  
程序代码:
#include <stdio.h>

int main (int argc, char *argv[])
{
    int i=123456;
    char *c="window(10,10,200,300)";
    int m=printf("%d\n",i);
    int n=printf("%s\n",c);
    printf("%d %d\n",m,n);
    return 0;
}
但是明显 这个指标没啥实际作用  不知道微软给printf加入这个指标有虾米作用

DO IT YOURSELF !
2013-08-05 06:43
快速回复:关于printf() 使用时遇到的4个疑问。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045500 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved