| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 879 人关注过本帖
标题:录入多个数进行重复数字的判断
只看楼主 加入收藏
达尔文
Rank: 2
等 级:论坛游民
帖 子:84
专家分:29
注 册:2015-8-22
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:16 
录入多个数进行重复数字的判断
程序代码:

 printf("Enter a number:");

 scanf("%ld",&n);

 

 while (n > 0){
    
    while (n > 0){
   
      digit = n % 10;
       if (digit_seen[digit]){

        if (n > 0) 
      printf("%3d",digit); 

      printf("%3d \n",digit_seen[digit]);
      
      }
       digit_seen[digit] = true;
       n /= 10; 

    }
    digit_seen[digit] = 0;
    scanf("%ld",&n);
    
}

return 0;
}

问题有2:1.发现前面连用2个while条件都相同感觉怪怪的,有没有什么更好的方法代替。  2.比如第一次输入51562   输出5 1    but第二次输入217343  就会输出 3 1  1 1  2 1 (也就是第二次的输出受到了第一次的干扰,如何避免这种现象?)
2015-09-11 20:59
达尔文
Rank: 2
等 级:论坛游民
帖 子:84
专家分:29
注 册:2015-8-22
收藏
得分:0 
忘了说了后面的那个digit_seen[digit] = 0;应该是这样digit_seen[digit] = {0};但是这样又无法进行编译。我的想法是在这里将原先的库存数值清除为0.

能有一件喜欢的事很不容易,就坚持下去吧.....
2015-09-11 21:02
小王KING
Rank: 2
等 级:论坛游民
威 望:1
帖 子:29
专家分:69
注 册:2015-9-9
收藏
得分:0 
第二个问题好说,在调用scan函数前先清除一下键盘缓冲区的内容就可以了,不知道怎么清除的去看书,找不到在来问
第一个问题,自己多想想吧,多练练吧
2015-09-11 23:07
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:0 
回复 楼主 达尔文
说些题外话,网站对贴代码既不收费,也没有限制行数,所有代码要贴的全一些,一个函数代码,只有半拉,别人怎么去看,另外,对于别人的回帖要及时反馈,这是基本的道理,否则别人就不愿意给你回帖
2015-09-12 10:07
达尔文
Rank: 2
等 级:论坛游民
帖 子:84
专家分:29
注 册:2015-8-22
收藏
得分:0 
回复 5楼 jklqwe111
不好意思

能有一件喜欢的事很不容易,就坚持下去吧.....
2015-09-12 10:53
达尔文
Rank: 2
等 级:论坛游民
帖 子:84
专家分:29
注 册:2015-8-22
收藏
得分:0 
回复 3楼 小王KING
程序代码:
#include<stdbool.h>
#include<stdio.h>

int main(void)
{

 bool digit_seen[10] = {0};

 int digit;

 long n;

 

 printf("Enter a number:");

 scanf("%ld",&n);

 

 while (n > 0){
    
    while (n > 0){
   
      digit = n % 10;
       if (digit_seen[digit]){

        if (n > 0) 
      printf("%3d",digit); 

      printf("%3d \n",digit_seen[digit]);
      
      }
       digit_seen[digit] = true;
       n /= 10; 

    }
    fflush(stdin);
    scanf("%ld",&n);
    
}

return 0;
}

这样算不算清除键盘缓冲区呢感觉效果还是没有达到呢

能有一件喜欢的事很不容易,就坚持下去吧.....
2015-09-12 10:56
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你这个问题和前一个完全没关系啊?

授人以渔,不授人以鱼。
2015-09-12 11:48
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:15 
#include<stdbool.h>
#include<stdio.h>

int main(void)
{
bool digit_seen[10] = {0};
int digit;
long n;

printf("Enter a number:");
scanf("%ld",&n);

while (n > 0){
    //每次循环digit_seen[10]数组都要初始化,看一看数组的初始化与赋值的知识,把digit_seen[10]中的值全部赋值为0
    while (n > 0){
   
      digit = n % 10;
       if (digit_seen[digit]){

        if (n > 0) //何用? 此时此地n有<=0的可能吗,换一种说法,当n<=0时,while循环中的代码还能被执行吗
      printf("%3d",digit);

      printf("%3d \n",digit_seen[digit]);//打印的都是1,似乎没用吧
      
      }
       digit_seen[digit] = true;
       n /= 10;

    }
    fflush(stdin);
    scanf("%ld",&n);
   
}

return 0;
}
2015-09-12 12:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
我祗问你一个问题:既然要统计数字中出现的字符,何必把输入时本来就是字符串的东西弄成数值再返回来逐个分析成字符?

不要玩算法玩上瘾,整天拆数、计算,要根据实际情况灵活处理。输入的本来就是字符串,就逐个字符依次统计就是了,跟依次输入10个数值求最大值、最小值是同样的做法,加减乘除地算什么呢!

[ 本帖最后由 TonyDeng 于 2015-9-12 12:39 编辑 ]

授人以渔,不授人以鱼。
2015-09-12 12:25
达尔文
Rank: 2
等 级:论坛游民
帖 子:84
专家分:29
注 册:2015-8-22
收藏
得分:0 
回复 8楼 边小白
刚学习C,很多地方不是很明白,望多多指教。

能有一件喜欢的事很不容易,就坚持下去吧.....
2015-09-12 19:21
快速回复:录入多个数进行重复数字的判断
数据加载中...
 
   



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

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