| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1591 人关注过本帖
标题:给100分,能准确运行的时候就行,诚心感谢
取消只看楼主 加入收藏
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
结帖率:84.38%
收藏
已结贴  问题点数:100 回复次数:11 
给100分,能准确运行的时候就行,诚心感谢
不要其他的代码。就是找出这段代码的问题。运行咋有问题,我找累了
程序代码:
#include<stdio.h>
#include <string.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>

 int numbe2[4]={0};
     int numb2[4];
void init()//产生随机数种子 
{
    srand(time(0));
}
int *creat()//产生4个各不相同的随机数函数 ,把四个数保存在数组中,返回值是该数组的首地址 
{
     int flag[10]={0};
     
      int *p;
      p=numbe2;
     int tem=0,i=5,j=4;
     
     while(i)
     {
         tem=rand()%10;
         if(flag[tem]==0)
         {
             numbe2[j]=tem;
             flag[tem]=1;
              j--,i--;
         };
         }
          return p;
         }
int check(int *numbb,int *numbb2)//比较随机数数组和保存输入4个数的函数  
   {  int x=0,y=0,m,n;
       for( n=0;n<4;n++)
        for( m=0;m<4;m++)
            { if(numbb[n]==numbb2[m])
            {
            if(n==m)
            {
            x++;
            }
            else y++;
              }
           
       }
       if(x==4)
       {
            printf("恭喜你答对了!猜中的数字是%d%d%d%d",numbb[0],numbb[1],numbb[2],numbb[3]);
           return x;
           }
       
       else{
           printf("%dA%dB",x,y);
           return 0;
             }
       
   }
void start()//游戏开始 
{   int *numb;

    char numb3='\0';//结束标志保存在字符变量numb3中 
    int i=0;
    numb=creat();
   while(i<7)
   {

      fflush(stdin);//清空缓存 
       printf("请输入4个数,这是你第%d次猜\n",i+1);
    while(1)
    {        
        if((scanf("%d%d%d%d",&numb2[0],&numb2[1],&numb2[2],&numb2[3])==4)&&(numb3==getchar()))// scanf格式读取四个数,正确输入第5个应该是'\0' 
        {
         break;
        }
        
        else  {
                   fflush(stdin);
            printf("输入错误,请重新输入\n"); 
         
             }
        printf("按Q/q退出\n");
        if('Q'==getch()||'q'==getch())
        exit(0);
        
    }
   if(check(numb,numb2))//调用check函数,返回值是4的话,退出while(i<7)循环 
   {
  
   break;
   }
   else//返回值是0的话就i++,然后继续内循环while 
    {
        i++;
        continue;
    }
   }
   
    
}
int main(void)
{
        init();
        start();
}


[ 本帖最后由 a271885843 于 2012-7-2 22:01 编辑 ]
搜索更多相关主题的帖子: 100分 
2012-07-02 21:45
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用embed_xuel在2012-7-2 21:51:05的发言:

char ch;
ch=getch();
if(('Q'==ch)||('q'==ch))

嗯。还有问题。就是输入4个数字或输入其他的字符串,回车没反应。验证输入是否正确那里有问题

认为事物非黑即白是缺智慧的表现……
2012-07-02 21:56
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用embed_xuel在2012-7-2 22:11:05的发言:

不知道对不对,我在手机上看的,你试试下面
charnumb3='\0'改成
charnumb3='\n'

妹的。在格式控制输入哪里%1d就行了。%d默认应该是几位。还是有点问题,还需要改进,还是有问题,还是有问题

[ 本帖最后由 a271885843 于 2012-7-2 22:45 编辑 ]

认为事物非黑即白是缺智慧的表现……
2012-07-02 22:30
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用a271885843在2012-7-2 22:30:44的发言:


妹的。在格式控制输入哪里%1d就行了。%d默认应该是几位。还是有点问题,还需要改进,还是有问题,还是有问题

还是有问题

[ 本帖最后由 a271885843 于 2012-7-2 23:05 编辑 ]

认为事物非黑即白是缺智慧的表现……
2012-07-02 22:52
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用a271885843在2012-7-2 22:52:20的发言:


还是有问题

主要的问题就是VS运行有点问题,CFREE没问题了,还有就是是不是比较两数组的算法有问题?

认为事物非黑即白是缺智慧的表现……
2012-07-03 00:03
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用TonyDeng在2012-7-3 17:06:18的发言:

又不知道你想干什么,你自己觉得有问题就仔细调试,解决不了就把问题说清楚,不要把整个东西发上来叫人猜,要么把需求写清楚。

想参照他们写的猜字游戏,就是程序随机产生各不相同的4个数字,然后让人去猜。这是他们写过的,我自己写哈练习一下。现在的问题就是程序改进后能在在cfree上编译通过,在VS上不能成功通过编译。基本上算是把问题解决了。

[ 本帖最后由 a271885843 于 2012-7-3 21:02 编辑 ]

认为事物非黑即白是缺智慧的表现……
2012-07-03 21:00
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用embed_xuel在2012-7-3 08:42:40的发言:

int*creat()//产生4个各不相同的随机数函数 ,把四个数保存在数组中,返回值是该数组的首地址{intflag[10]={0};int*p;      p=numbe2;inttem=0,i=5,j=4;while(i)     {         tem=rand()%10;if(flag[tem]==0)         {             numbe2[j]=tem; //前面j初始化为4,那么这句就是number2[4]=tem,数组越界了,numbe2下标只能从0到3

好,我改进。这样互动的学习提升过程感觉很不错

认为事物非黑即白是缺智慧的表现……
2012-07-03 21:03
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用TonyDeng在2012-7-3 21:12:38的发言:

要产生4个随机数,直接产生就是了,填在int num[4]数组中,你把产生随机数的机制弄到那么复杂干嘛?程序代码是由应用实际决定的,不要刻意使用某种技术。当你发觉在某个模块上面伤透了脑筋,就该考虑这个实现方式是不是过于复杂了。编程以简化、清晰为第一主导,对int num[4]这样的数组,都要用到指针,就已经进了误区,明显是为技术而技术。

只是想练习一下,能用的都用些。随机数方法参照是另一个写过这个程序的写的

[ 本帖最后由 a271885843 于 2012-7-3 21:22 编辑 ]

认为事物非黑即白是缺智慧的表现……
2012-07-03 21:20
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用TonyDeng在2012-7-3 21:24:53的发言:

你的int num[4]是整个程序的核心,各处都有用,就不妨设定为全局变量。然后定制一个函数,专门填写这个这个数组数据的:每产生一个随机数,在放入数组的时候,先寻找一下数组中有没有这个数,如果没有就放进去,有的话就重新产生一个再试,直到填完。填好之后,这个数组就可以用了。这样设计,程序好写,排查也容易,像你现在这样硬生生拆成几个函数,逻辑上就不通,正是造成你排错困难的原因。

嗯。

[ 本帖最后由 a271885843 于 2012-7-3 21:58 编辑 ]

认为事物非黑即白是缺智慧的表现……
2012-07-03 21:28
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用TonyDeng在2012-7-3 21:39:02的发言:

你寫16樓這樣一個函數,調試的時候,專門把最後的結果打印出來,看看是不是真的生成了4個無重複的隨機數,如果滿意,這個函數就通過了,由此確定那個int num[4]數組是可以使用的。然後再接著做後面的模塊。這樣一個一個做,哪有容易錯之理。

在子函數內部創建數組變量返回給上一層,是註定不成功的,不能用數組,只能用堆內存分配,只有堆分配的引用變量才不會隨著函數的結束而結束,但隨之而來的就是指針管理和內存釋放麻煩。你要練習指針技術,也要弄清楚整個機制才好,十分清楚自己要做什麼、怎麼做,否則只能是亂寫一氣。不過,我還是奉勸你一句,不要太執著於指針了,學C學到把精力花費在這種地方,不值得,這話我說過很多次,聽不聽在別人了。

int num[4]={0};
    int i=0;
     for(;i<4;i++)
      {  
        num[i]=rand()%10;
         int j=0;
          while(j<i)
          {
            if(num[i]!=num[j])
             {
               j++;
             continue;
             }
           else
        {
       num[i]=rand()%10;
        j=0;
          }
         }
写了个,等哈验证看看对不对。至于指针,也就是争取掌握,以后C扎实了,就数据结构和C++ 。谨听你言,指针毕竟是容易出错。

[ 本帖最后由 a271885843 于 2012-7-4 20:05 编辑 ]

认为事物非黑即白是缺智慧的表现……
2012-07-03 22:03
快速回复:给100分,能准确运行的时候就行,诚心感谢
数据加载中...
 
   



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

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