| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5800 人关注过本帖
标题:学写程序,先把《Hello,world!》写好
只看楼主 加入收藏
风生钧起
Rank: 4
来 自:江西
等 级:业余侠客
帖 子:383
专家分:246
注 册:2011-7-26
收藏
得分:0 
不太懂  瞎搞了下

墨一世红颜倾醉己    霁天谁与话风流

修仙``````````````````````````````````````````````
2011-08-01 23:52
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* p, int iVar);

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

    printf("%s\n", TransForm(cString, 1234567));
    printf("%s\n", TransForm(cString, 0));
    printf("%s\n", TransForm(cString, -1234567));
}

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

    if (iVar == 0)
    {
        // 如果传入的数值为0直接返回"0"
        *p++ = '0';
        *p = '\0';
        return pBuffer;
    }

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

    iIndex = 1;
    iCount = 0;
    while (iVar > 0)
    {
        if (iCount < 3)
        {
            iCount++;
        }
        else
        {
            *p++ = ',';
            iCount = 1;
        }
        *p++ = '0' + iVar % 10;
        iVar = iVar / 10;
        iIndex++;
    }
    if (lNegative)        // 补回负数的标识
    {
        *p++ = '-';
    }
    *p = '\0';            // 字符串结束符

    return _strrev(pBuffer);    // 反转缓冲区之后返回
}
// 其实可以不返回缓冲区的地址, 改为返回字符串的字符数, 为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 iIndex;            // 循环计数器
    int iCount;            // 千位计数器
    bool lNegative;        // 是否负数的标志
    char* p = cBuffer;    // 记录缓冲区的起始地址(p是动指针, cBuffer是不动的, 用于返回)

    if (iVar == 0)
    {
        // 如果传入的数值为0直接返回"0"
        *p++ = '0';
        *p = '\0';
        return cBuffer;
    }

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

    iIndex = 1;
    iCount = 0;
    while (iVar > 0)
    {
        if (iCount < 3)
        {
            iCount++;
        }
        else
        {
            *p++ = ',';
            iCount = 1;
        }
        *p++ = '0' + (iVar % 10);
        iVar /= 10;
        iIndex++;
    }
    if (lNegative)        // 补回负数的标识
    {
        *p++ = '-';
    }
    *p = '\0';            // 字符串结束符

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


[ 本帖最后由 TonyDeng 于 2011-8-2 01:39 编辑 ]

授人以渔,不授人以鱼。
2011-08-02 00:09
风生钧起
Rank: 4
来 自:江西
等 级:业余侠客
帖 子:383
专家分:246
注 册:2011-7-26
收藏
得分:10 
让我情何以堪!~不用参考        实乃刚学C没几天  程序我记下了
 暂时不会而已

墨一世红颜倾醉己    霁天谁与话风流

修仙``````````````````````````````````````````````
2011-08-02 00:17
风生钧起
Rank: 4
来 自:江西
等 级:业余侠客
帖 子:383
专家分:246
注 册:2011-7-26
收藏
得分:0 
你 程序怎么有个错误

墨一世红颜倾醉己    霁天谁与话风流

修仙``````````````````````````````````````````````
2011-08-02 00:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
加了注释

授人以渔,不授人以鱼。
2011-08-02 00:21
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
wjm22
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:44
专家分:118
注 册:2011-7-5
收藏
得分:0 
#include<stdio.h>
#include<string.h>
void main()
{
    char a[30],temp[30];
    int i=0,n=0,m=0;
    scanf("%s",a);
    while(a[i]!='\0')
        i++;
    for(i=i-1;i>=0;i--)
    {
        if((m>=3)&&(m%3==0))
        {temp[n]=',';n++;}
        m++;
        temp[n]=a[i];
        n++;
    }
    for(n=n-1;n>=0;n--)
        putchar(temp[n]);
}
不知道符合题意不......
2011-08-02 00:54
wjm22
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:44
专家分:118
注 册:2011-7-5
收藏
得分:0 
#include<stdio.h>
#include<string.h>
void main()
{
    char a[30],temp[30];
    int i=0,n=0,m=0;
    scanf("%s",a);
    while(a[i]!='\0')
        i++;
    for(i=i-1;i>=0;i--)
    {
        if((m>=3)&&(m%3==0))
        {temp[n]=',';n++;}
        m++;
        temp[n]=a[i];
        n++;
    }
    for(n=n-1;n>=0;n--)
        putchar(temp[n]);
}
不知道符合题意不......
2011-08-02 00:54
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
wjm22
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:44
专家分:118
注 册:2011-7-5
收藏
得分:20 
#include<stdio.h>
 #include<string.h>
 void main()
 {
     char a[30],temp[30];
     int i=0,n=0,m=0;
     scanf("%s",a);
     while(a[i]!='\0')
         i++;
     for(i=i-1;i>=0;i--)
     {
         if(a[i]=='-')
             temp[n]=a[i];
         else if((m>=3)&&(m%3==0))
         {temp[n]=',';n++;}
         m++;
         temp[n]=a[i];
         n++;
     }
     for(n=n-1;n>=0;n--)
         putchar(temp[n]);
 }
修改了一下,现在可以接受负号
2011-08-02 01:03
快速回复:学写程序,先把《Hello,world!》写好
数据加载中...
 
   



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

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