| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5800 人关注过本帖
标题:学写程序,先把《Hello,world!》写好
取消只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用风生钧起在2011-8-2 00:20:21的发言:

你 程序怎么有个错误


我的是VS2010编译器,使用的_strrev()是安全函数,标准C是strrev()。第一个头文件是你们不需要的。

授人以渔,不授人以鱼。
2011-08-02 00:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 59楼 wjm22
我没运行测试你的程序,但初步看有两个问题:
1.应接收的a是整数
2.你的temp数组最后没有加'\0'标志字符串终止
你运行过没有?

授人以渔,不授人以鱼。
2011-08-02 00:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
对,是这个输出,但请声明int a;不能用char a[30];
要求是将整数变成那个格式的字符串输出,不是将字符串插入逗号输出。

授人以渔,不授人以鱼。
2011-08-02 01:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 67楼 a9517495424
嘻嘻,有进步了。不过,这样一节一节地推,会不会觉得重复的代码太多了?如果节数太多以至于无穷,这种算法就没完没了。能动出这样的脑筋就不错,有分的,希望继续完善。

授人以渔,不授人以鱼。
2011-08-02 09:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 70楼 龙骑VS幽鬼
你这个跟a9517495424原先的思路差不多,你参照一下前面我跟他对答的帖子。

授人以渔,不授人以鱼。
2011-08-02 10:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 72楼 new335
我不知道你第一章是什么内容,解这个最少要懂逐个字符输出(即会用putchar()函数)、数学运算(提取每一位数字)。

授人以渔,不授人以鱼。
2011-08-02 10:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
下面是我的参考代码
程序代码:
#include "stdafx.h"
#include <stdio.h>
#include <string.h>

char* TransForm(char cBuffer[], int iVar);

void main(void)
{
    char cString[1024];

    // Hello,world!的翻版
    // 原先是这样写的
    // char cString[] = "Hello,world!";
    // 即printf("%s\n", cString);
    // 套上面的格式, 成下面这样, 这种套换方式, 是程序语言的基本用法
    printf("%s\n", TransForm(cString, 1234567));
    printf("%s\n", TransForm(cString, 0));
    printf("%s\n", TransForm(cString, -1234567));
    // 注意与下面变换对比:
    // printf("%d\n", 1234567);
    // 这样就可以猜到printf()内部的动作了

    // 如果要回避printf(), 可以
    // puts(TransForm(cString, 1234567));
    // 不妨比较前后两种版本(printf()版和puts()版)EXE文件的大小
}

char* TransForm(char cBuffer[], int iVar)
{
    int iCount;            // 千位计数器
    bool lNegative;        // 是否负数的标志
    char* p = cBuffer;    // 记录缓冲区的起始地址(p是动指针, cBuffer是不动的, 用于返回)

    if (iVar == 0)
    {
        // 如果传入的数值为0直接返回"0"
        *p++ = '0';        // 数组版本可写成cBuffer[0] = '0';
        *p = '\0';        // 数组版本可写成cBuffer[1] = '\0';
        return cBuffer;
    }

    lNegative = (iVar < 0);
    if (lNegative)
    {
        iVar = -iVar;    // 取正数计算
    }

    iCount = 0;
    while (iVar > 0)
    {
        if (iCount < 3)
        {
            iCount++;
        }
        else
        {
            *p++ = ',';
            iCount = 1;
        }
        *p++ = '0' + (iVar % 10);        // 数组版本应建立一个下标计数器写入数据
        iVar /= 10;
    }
    if (lNegative)        // 补回负数的标识
    {
        *p++ = '-';
    }
    *p = '\0';            // 字符串结束符

    return _strrev(cBuffer);    // 反转缓冲区之后返回
}
// 其实可以不返回缓冲区的地址, 改为返回字符串的字符数, 为0时失败.

授人以渔,不授人以鱼。
2011-08-02 13:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
重复帖清空内容

授人以渔,不授人以鱼。
2011-08-02 13:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
84楼的基本思路是可以的,也是我最早建议风生考虑的sprintf()模型,实现的耗费虽然大点,但是可行。84楼的程序,小细节上有点毛病,首先分配了内存没有释放(在Windows下没后患,但在DOS下是严重问题),其次没有考虑数据的符号。

授人以渔,不授人以鱼。
2011-08-03 19:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 90楼 gao_guai
单纯读程序看,结果似乎不大对哦,这是从左面开始每3位一个逗号是吧?

授人以渔,不授人以鱼。
2011-08-05 15:08
快速回复:学写程序,先把《Hello,world!》写好
数据加载中...
 
   



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

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