| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 658 人关注过本帖
标题:[求助]这个问题我是想破了头都没办法解决!!
只看楼主 加入收藏
gisiyang
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-9-18
收藏
 问题点数:0 回复次数:8 
[求助]这个问题我是想破了头都没办法解决!!

这是我编的一个子函数,目的是输入4个数字,然后判断输入的这4个数字里面有没有重复的,如果有就重新输入,直到没有时。输入时如果输入的数超过4个,用%4d可以屏蔽前4个后面的数。 void scan(int x[]) { int a,i,t,j,*p,flag=0; printf("请输入4个不大于10的数字:"); while(1) { if(flag!=0)printf("有数字重复了,请重新输入:"),flag=0; scanf("%4d",&a); /* 用%4d屏蔽前4位数后的数,其实并没有释放,如何释放 */ printf("%d\n",a); /* 检测输入的数据 ,以后要删除掉 */ x[0]=a/1000; /* 将输入的数按数位储存 */ x[1]=(a-x[0]*1000)/100; x[2]=(a-x[0]*1000-x[1]*100)/10; x[3]=a-x[0]*1000-x[1]*100-x[2]*10; p=x; for(i=0;i<4;i++) { t=x[i]; for(j=i+1;j<4;j++) if(t==*(p+j))flag=1; } if(flag==0)break; } }

main() { int a[4]; scan(a); }

我的问题是:输入的一串数给变量A,不管输入的数有没有重复的,只要没有超过了4个就正常运行。如果输入的数超过4个,但没有重复的,也能正常运行。但是如果超过4个并且有重复的,那么第一遍输入时被屏蔽掉的数,会在执行第二次输入时自动赋值给变量A。如何能真正的屏蔽掉4位以后的数,让重复输入时不会自动赋值?

搜索更多相关主题的帖子: flag 数字 办法 printf 
2005-09-19 18:32
jackrain
Rank: 1
等 级:新手上路
帖 子:182
专家分:0
注 册:2005-9-4
收藏
得分:0 
清输入流缓冲区即可。。另外,你取4个数字的过程
   x[0]=a/1000;                           /* 将输入的数按数位储存 */
   x[1]=(a-x[0]*1000)/100;
   x[2]=(a-x[0]*1000-x[1]*100)/10;
   x[3]=a-x[0]*1000-x[1]*100-x[2]*10;
太麻烦。
x[0] = a/1000;
x[1] = (a%1000)/100;

a[2] = (a%100)/10;
x[3] = a%10;

程序和身体一样,健壮,再健壮! 我爱C++
2005-09-19 18:52
gisiyang
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-9-18
收藏
得分:0 
怎么清,俺不会~!

『StarCraft』
2005-09-19 18:56
gisiyang
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-9-18
收藏
得分:0 
我没学过数据结构,好多东西都不知道。例如用模来取数字,俺都没想到过。呵呵,高手就是高手

[此贴子已经被作者于2005-9-19 19:01:41编辑过]



『StarCraft』
2005-09-19 19:00
gisiyang
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-9-18
收藏
得分:0 
对了,还有我用的是tc for win这个编译环境。每次新建时都会自动添加#include &lt;coni**.h&gt;没记住咋写,呵呵。还有一个函数getch()这有什么用的。函数的意思我明白,就是不知道有什么用。

『StarCraft』
2005-09-19 19:03
jackrain
Rank: 1
等 级:新手上路
帖 子:182
专家分:0
注 册:2005-9-4
收藏
得分:0 
C语言里清输入流缓冲区,一般用fflush(STDIN),不过因为这个函数在C标准里并没有定义当参数为stdin时会发生什么后果,所以不同的编译器可能有不同的结果,具体我也不清楚,很多人都不提倡用。我只知道C++里用clear()、ignore()函数来处理。

程序和身体一样,健壮,再健壮! 我爱C++
2005-09-19 19:06
jackrain
Rank: 1
等 级:新手上路
帖 子:182
专家分:0
注 册:2005-9-4
收藏
得分:0 
getch()从缓冲区取字符。一般来说运行程序的时候,把这一句加在最后,让你看清楚程序运行的结果,否则运行窗口会一闪而过。相当于pause的效果。

程序和身体一样,健壮,再健壮! 我爱C++
2005-09-19 19:08
jackrain
Rank: 1
等 级:新手上路
帖 子:182
专家分:0
注 册:2005-9-4
收藏
得分:0 
好了,偶有事下了。祝你好运。

程序和身体一样,健壮,再健壮! 我爱C++
2005-09-19 19:09
gisiyang
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-9-18
收藏
得分:0 
哦~~谢谢~!
你真是个热心的人!祝你成功~!

『StarCraft』
2005-09-19 19:12
快速回复:[求助]这个问题我是想破了头都没办法解决!!
数据加载中...
 
   



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

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