| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 608 人关注过本帖
标题:求高手指正 题目要求:从输入一段字符串,输出格式是如"543,147,018 Byt ...
只看楼主 加入收藏
龙骑VS幽鬼
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2011-7-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
求高手指正 题目要求:从输入一段字符串,输出格式是如"543,147,018 Byte"。
#include <stdio.h>
#include<string.h>

void output(char a[])
{
   int i = 0;

   while ( a[i] != '\0' )
   {
      if ( i % 3 == 2)
      {
          putchar(a[i]);
          i++;
          putchar(',');
      }
      if ( i % 3 != 2)
      {
          putchar(a[i]);
          i++;  
      }
   }
   if(a[i]=='\0')
       printf(" Byte\n");

}

int main(void)
{
    char data[10];

    printf("Please input the data: ");
    gets(data);
    output(data)
}

 
搜索更多相关主题的帖子: void 147 include 字符串 
2011-08-02 10:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
接收字符串这样输出,显示是对的。基本运行没有错误,但是有多余的代码:
1.不用两个if,==2和!=2是互斥的,其实同一个if
2.两个if之中有两行的代码是完全一样的,可以提取到外面。

授人以渔,不授人以鱼。
2011-08-02 11:06
ZJQLOVELYY
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:166
注 册:2011-8-1
收藏
得分:10 
你的错了好多····要改真不容易   早知就重写了···
程序代码:
#include <stdio.h>
#include<string.h>

void output()
{
    extern char data[10];
    int i = 9;
   while ( data[i] != '\0' )
   {
      if ( i % 3 == 1)
      {
          putchar(data[i]);
          i--;
          putchar(',');
      }
      if ( i % 3 != 1)
      {
          putchar(data[i]);
          i--; 
      }
   }
   if(data[i]=='\0')
       printf(" Byte\n");
}
char data[10];
void main()
{
    printf("Please input the data: ");
    gets(data);
    output();
}
2011-08-02 11:15
ZJQLOVELYY
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:166
注 册:2011-8-1
收藏
得分:0 
我的错了,反了,输出忘记调回来···
2011-08-02 11:18
ZJQLOVELYY
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:166
注 册:2011-8-1
收藏
得分:0 
这样
程序代码:
#include <stdio.h>
#include<string.h>

void output(char a[])
{
   int i = 0;

   while ( a[i] != '\0')
   {
      if ( i % 3 == 2&&i<8)
      {
          putchar(a[i]);
          i++;
          putchar(',');
      }
      else
      {
          putchar(a[i]);
          i++; 
      }
   }
   if(a[i]=='\0')
       printf(" Byte\n");

}

void main()
{
    char data[10];

    printf("Please input the data: ");
    gets(data);
    output(data);
}
可以了
2011-08-02 11:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你俩最终的也差不多嘛,加了&& i<8,有什么关键性作用呢?要讲得出理由才成。

授人以渔,不授人以鱼。
2011-08-02 11:46
龙骑VS幽鬼
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2011-7-28
收藏
得分:0 
首先谢谢指正!下边是修改后的代码,看看还有需要改进的么,谢谢 !
#include <stdio.h>
#include<string.h>

void output(char a[])           //输出函数
{
   int i = 0;

   while ( a[i] != '\0' )      
   {
      
        putchar(a[i]);              
         i++;
      if ( i % 3 == 0&&a[i]!='\0')  //当输出满3位,且没到最后一位 输出 “,”
              putchar(',');  
   }
   if(a[i]=='\0')         
         
       {  if(i==0)                    //未输入数据
             printf("sorry,you don't input the data!!\n");
          else
             printf(" Byte\n");
       }      
}

int main(void)
{
    char data[10];

    printf("Please input the data: ");
    gets(data);
    output(data);
}

[ 本帖最后由 龙骑VS幽鬼 于 2011-8-2 12:22 编辑 ]
2011-08-02 12:10
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你回头看看要求,满3位1个逗号,是从后面数起的,不是从前面数起的。你这个代码仍然有很多多余的判断,从逻辑上就能分析到有永远不会执行的代码,注意检查——设计程序的第一步,是规划好逻辑流程(正规课程教画流程图,现实中极少有人真的这样做,但至少在头脑中要有清晰的逻辑思路)。另外的小细节,以后再慢慢培养吧,比如,未输入数据部分,逻辑上应该一进入函数开始就拦截,不用阅读的人以为你对未输入数据做一大堆无用功,这仍然是逻辑问题。

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

授人以渔,不授人以鱼。
2011-08-02 12:20
龙骑VS幽鬼
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2011-7-28
收藏
得分:0 
谢谢,大家的帮助,我会继续努力!
2011-08-02 12:27
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct node NODE, * PNODE;
typedef const PNODE PCNODE;

struct node {
    char bits[4];
    PNODE next;
};

void *       check(void * p);
PCNODE       init_stack(void);
PCNODE       push(PNODE pTop, const char * bits);
const char * pop(PNODE pTop);
int          is_empty(PCNODE pTop);
void         kill_stack(PNODE top);
char *       number_format(long num, char * buf);

void * check(void * p) {
    if(!p) {
        fprintf(stderr, "There's a error in program and then program will to exit.\n");
        system("pause");
        exit(1);
    }
    return p;
}

PCNODE init_stack(void) {
    PNODE pTop = (PNODE)malloc(sizeof(NODE));
    check(pTop);
    pTop->next = NULL;
    return pTop;
}

PCNODE push(PNODE pTop, const char * bits) {
    PNODE pNewNode = (PNODE)malloc(sizeof(NODE));
    check(pNewNode);

    strcpy(pNewNode->bits, bits);
    pNewNode->next = pTop->next;
    pTop->next = pNewNode;

    return pNewNode;
}

const char * pop(PNODE pTop, char * bits) {
    PNODE pTemp = pTop->next;

    if(is_empty(pTop))
        return NULL;

    strcpy(bits, pTemp->bits);
    pTop->next = pTemp->next;

    free(pTemp);
    return bits;
}

void kill_stack(PNODE pTop) {
    char buf[4];
    while(pop(pTop, buf))
        ;
    free(pTop);
}

int is_empty(PCNODE pTop) {
    return pTop->next == NULL;
}

char * number_format(long num, char * buf) {
    int             isNage = num < 0;
    char *          pTemp = buf;
    char            bits[4];
    PNODE           pTop = init_stack();
    unsigned long   temp = isNage ? ~(unsigned long)num + 1 : (unsigned long)num;

    while(temp) {
        sprintf(bits, "%d", temp % 1000);
        push(pTop, bits);
        temp /= 1000;
    }
    if(isNage) {
        strcpy(buf, "-");
        strcat(buf, pop(pTop, bits));
    } else
        strcpy(buf, pop(pTop, bits));
    while(pop(pTop, bits)) {
        strcat(buf, ",");
        strcat(buf, bits);
    }
    kill_stack(pTop);
    return buf;
}

int main(void) {
    char    fileName[128];
    char    buf[100];
    long    size;
    long    value;
    FILE *    fp;
   
    scanf("%s", fileName);
    check(fp = fopen(fileName, "rb"));
    fseek(fp, 0L, SEEK_END);
    size = ftell(fp);
    printf("Size of \"%s\" is %s bytes.\n", fileName, number_format(size, buf));

    scanf("%ld", &value);
    printf("%s\n", number_format(value, buf));

    system("pause");
    return 0;
}

My life is brilliant
2011-08-02 14:34
快速回复:求高手指正 题目要求:从输入一段字符串,输出格式是如"543,147,01 ...
数据加载中...
 
   



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

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