| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5800 人关注过本帖
标题:学写程序,先把《Hello,world!》写好
只看楼主 加入收藏
platolgq
Rank: 2
来 自:江西
等 级:论坛游民
帖 子:74
专家分:87
注 册:2011-2-24
收藏
得分:0 
看来技术没有到位,有点不明白楼主的要求

C种的自学者
2011-08-01 21:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用风生钧起在2011-8-1 20:55:56的发言:

又学到知识了 sprintf_s()  我去弄弄 估计弄的出了


sprintf()是printf()内部调用的东西,哈哈~
同样scanf()也源自sscanf()……

你弄过这些函数,回头想想所谓的控制台(stdio)流输入输出是什么概念,那根本就是字符串序列,内存、文件、控制台等等,都是同一个模型。这个才是原理,这个原理才是真正要知道的,将来碰到不管什么语言、什么应用,都可以用这个基本原理去测量它们的动作,知道人家是怎么实现功能的,你又可以怎样做。你真以为学C语言是拿着它去写程序啊?不要那么傻,现实中真需要用C写程序的场合极为稀罕,除非你铁了心肠要应聘微软公司的核心代码程序员。

授人以渔,不授人以鱼。
2011-08-01 21:06
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:10 
输入文件路径就能在stdout得到文件大小:
程序代码:
#include <stdio.h>
#include <assert.h>
#include <limits.h>
#include <math.h>

char * get_file_size(FILE * fp, char * buf) {
    long    size;
    int     i, j, k = 0;
    char *  pTemp = buf;

    assert(!fseek(fp, 0L, SEEK_END));
    assert((size = ftell(fp)) != -1);
    i = (int)log10((double)(size));
    j = (int)pow(10.0, i);
    while(j) {
        if((i + 1 - k) % 3 == 0 && k)
            *pTemp++ = ',';
        *pTemp++ = size / j % 10 + '0';
        j /= 10; k++;
    }
    *pTemp = '\0';
    return buf;
}

int main(void) {
    char    buf[(int)log10((double)(LONG_MAX)) + 5];
    char    file_name[128];
    FILE *  fp;

    scanf("%s", file_name);
    assert(fp = fopen(file_name, "rb"));
    printf("Size of file %s is %s bytes.\n", file_name, get_file_size(fp, buf));
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册



My life is brilliant
2011-08-01 21:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 23楼 lz1091914999
可以实现需要的效果,只是做了太多无用功。会给分的。

授人以渔,不授人以鱼。
2011-08-01 21:22
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 24楼 TonyDeng
你能指出来吗?

My life is brilliant
2011-08-01 21:24
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 24楼 TonyDeng
我知道你肯定会说我没用sprintf。呵呵,但是你要把你的代码亮出来啊?

[ 本帖最后由 lz1091914999 于 2011-8-1 21:29 编辑 ]

My life is brilliant
2011-08-01 21:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用lz1091914999在2011-8-1 21:24:32的发言:

你能指出来吗?


1.你其实没有读题,我是说构造一个函数,接收一个数值,按照指定的格式返回字符串,不是要你真正去读一个文件的大小。
2.就算是取文件的大小,你也没有必要真的打开它,还要移动指针求尺寸,文件不是你专用的,说打开就能打开。你见资源管理器打开每个文件来列表的吗?
3.题目本身是整数类型(不管是多少字节的),但你函数中用到了double数据类型转换,长精度的数据转回短精度的时候,会有丢失数据风险的,应慎用。

[ 本帖最后由 TonyDeng 于 2011-8-1 21:31 编辑 ]

授人以渔,不授人以鱼。
2011-08-01 21:30
loveshuang
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
帖 子:270
专家分:1198
注 册:2010-11-14
收藏
得分:0 
      果断顶起。。。
2011-08-01 21:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我已经说了,实现这个功能的方法有很多种,是练程序设计的好素材,没有也不需要标准答案,修炼在每个人的过程中。不用sprintf()当然可以,直接分析数据取位就可以即时构造字符串输出,而且是最快最直接的方法,sprintf()仍然占用大量内存和代码,而这个不用。不过,我们还要考虑不同数据类型的情况,未必要区分参数设计不同的实现版本(在C++可以重载函数使用相同的函数名,但C不能),此时的实现机制仍然要综合衡量。总之,留着它练手吧,做到(自觉也好)完美了,写程序的功夫就算是过关了,这可不是骗人,信不信随你(写下去,还会发现面向对象的需要)。

授人以渔,不授人以鱼。
2011-08-01 21:40
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
以下是引用TonyDeng在2011-8-1 21:30:46的发言:

 
 
1.你其实没有读题,我是说构造一个函数,接收一个数值,按照指定的格式返回字符串,不是要你真正去读一个文件的大小。
2.就算是取文件的大小,你也没有必要真的打开它,还要移动指针求尺寸,文件不是你专用的,说打开就能打开。你见资源管理器打开每个文件来列表的吗?
3.题目本身是整数类型(不管是多少字节的),但你函数中用到了double数据类型转换,长精度的数据转回短精度的时候,会有丢失数据风险的,应慎用。
1、我可以马上改代码。
2、C标准库里你能找一个获得文件大小的函数吗?
3、你是一个新手吧?你可以去看看pow和log10的参数以及它的返回值,我这样做的一是消除编译警告二是我需要截断小数部分。

[ 本帖最后由 lz1091914999 于 2011-8-1 21:58 编辑 ]

My life is brilliant
2011-08-01 21:42
快速回复:学写程序,先把《Hello,world!》写好
数据加载中...
 
   



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

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