| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 588 人关注过本帖
标题:一变量在循环中发上变化
取消只看楼主 加入收藏
鹿言弓
Rank: 1
等 级:新手上路
帖 子:26
专家分:1
注 册:2012-11-14
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:9 
一变量在循环中发上变化
               
                   if(L.r[low].money>n.money){
                              for(j=L.length;j>=low;--j){
                               printf("2*%d*\n",L.length);//这儿是我进行检查的,本来L.length自加成9,在第一次时很正常,但在第二次,就突然变成-2         
                                      L.r[j+1]=L.r[j];
                                       L.r[low]=n;
                                           if(L.length<10)                                                                             
                                         L.length++;
                                         return 1;               
                                       }

此部分偏偏在L.length=9时出错,它是从0开始自加的,在1,2,3等时,都是正常的。
搜索更多相关主题的帖子: 加成 
2012-12-07 19:43
鹿言弓
Rank: 1
等 级:新手上路
帖 子:26
专家分:1
注 册:2012-11-14
收藏
得分:0 
回复 2楼 wp231957
我全部输出了的,都没问题,L.length都没问题,就是那点在第二次中,突然发生了变化,变成了-2.
2012-12-07 20:15
鹿言弓
Rank: 1
等 级:新手上路
帖 子:26
专家分:1
注 册:2012-11-14
收藏
得分:0 
也不知道能发图片不?我发个我程序运行的截图。
不知道你们懂我意思不?我也不知道怎么解释啦。
求指教,又没对它进行赋值,它为啥就变了呀。。。
2012-12-07 20:21
鹿言弓
Rank: 1
等 级:新手上路
帖 子:26
专家分:1
注 册:2012-11-14
收藏
得分:0 
回复 5楼 wp231957
捕获.zip (20.54 KB)

程序截取的部分,这个功能其实是排序而已,你要源代码吗?我写的可能有点复杂老。谢谢啦。
2012-12-07 21:01
鹿言弓
Rank: 1
等 级:新手上路
帖 子:26
专家分:1
注 册:2012-11-14
收藏
得分:0 
回复 7楼 神龙赖了
  //楼主我想问一下,在创建函数中这里就直接返回了,应该不会有第二次循环了吧?   

没太懂,你说的意思。返回后,始终是会再次调用函数啥。
2012-12-07 22:04
鹿言弓
Rank: 1
等 级:新手上路
帖 子:26
专家分:1
注 册:2012-11-14
收藏
得分:0 
回复 8楼 zhou31146001
那只是个输出而已,就是个检查作用的语句。
2012-12-07 22:05
鹿言弓
Rank: 1
等 级:新手上路
帖 子:26
专家分:1
注 册:2012-11-14
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct imformation{
        char name[5];
        int money;
        int rate;
        int fame;
        int reputation;
        }im;
typedef struct{
        im r[10];
        int length;
}sqlist;
        int compare(sqlist &L,im n)
        { 
              int low,high,mid,i,j;
              low=1;
              high=L.length;
              if(L.length==0)
              {    
                     L.r[1]=n;
                     L.length++;      
                             }
               else
               {  
                 while(low<high)
                 {        
                           mid=(low+high)/2;
                           if(L.r[mid].money==n.money){
                                 for(i=1;L.r[mid+i].money==n.money;)
                                                    ++i;                                             
                                             if(mid+i-1==L.length){
                                                   L.r[mid+i]=n;                                               
                                                    if(L.length<10)                            
                                                    L.length++;
                                                    return 1;}
                                             else {     
                                               for(j=L.length;j>=mid+i;--j)
                                                     L.r[j+1]=L.r[j];
                                                     printf("%d_1\n",L.length);   //当length=9时,此处会发生改变,为-2;其他时候正常,比如length为1,2,3等
                                                     L.r[mid+i]=n;
                                                     if(L.length<10)                                                                                      
                                                     L.length++;
                                                     return 1;
                                                     }          
                                                       }
                           else if(L.r[mid].money<n.money)
                                         low=mid+1;
                                       else
                                         high=mid-1;                           
                                 }
                                
                   if(L.r[low].money>n.money){
                              for(j=L.length;j>=low;--j){
                                      printf("%d_2\n",L.length);//           
                                      L.r[j+1]=L.r[j];
                                                        }//同样,当length=9时,此处会发生改变,为-2;其他时候正常,比如length为1,2,3等
                                       L.r[low]=n;
                                           if(L.length<10)                                                                           
                                         L.length++;
                                         return 1;             
                                          }
                    else if(L.r[low].money<=n.money){
                                    for(j=L.length;j>=low+1;--j){
                                    printf("%d_3\n",L.length);//同样,当length=9时,此处会发生改变,为-2;其他时候正常,比如length为1,2,3等                      
                                      L.r[j+1]=L.r[j];
                                                       }
                                      L.r[low+1]=n;
                                      if(L.length<10)                                   
                                      L.length++;
                                      return 1;          
                                              }     
               }          
        }
        int main()
        {
           sqlist L;
           im m;
           int i;
           L.length=0;
           while(1){
           system("cls");                 
           for(i=L.length;i>=1;--i)
           printf("%d\n",L.r[i].money);
           printf("请输入你的金额:\n");
           scanf("%d",&m.money);
           compare(L,m);
           for(i=L.length;i>=1;--i)  //
           printf("%d\n",L.r[i].money);  //
           system("pause");//  
           } 
2012-12-07 23:23
鹿言弓
Rank: 1
等 级:新手上路
帖 子:26
专家分:1
注 册:2012-11-14
收藏
得分:0 
回复 13楼 神龙赖了
没懂你的意思?你想表达什么意思呀?
2012-12-08 23:14
鹿言弓
Rank: 1
等 级:新手上路
帖 子:26
专家分:1
注 册:2012-11-14
收藏
得分:0 
回复 13楼 神龙赖了
我简化了一下,还是那点出错。您帮我看看。
#include <stdio.h>
#include <stdlib.h>
typedef struct{
        int r[10];
        int length;
}sqlist;
        int compare(sqlist &L,int money)
        {   
              int low,high,mid,i,j;
              low=1;
              high=L.length;
              if(L.length==0)
              {      
                     L.r[1]=money;
                     L.length++;        
                             }
               else
               {   
                 while(low<=high)
                         {         
                           mid=(low+high)/2;
                          if(money<L.r[mid])
                          high=mid-1;
                          else
                          low=mid+1;
                          }                                    
                          for(j=L.length;j>=high+1;--j)
                          L.r[j+1]=L.r[j];
                          L.r[high+1]=money;
                          if(L.length<10)
                          L.length++;
                          }
                          return 1;
                          }                           
        int main()
        {  
           sqlist L;
           int i,money;
           L.length=0;
           while(1){
           system("cls");                  
           for(i=L.length;i>=1;--i)
           printf("%d\n",L.r[i]);
           printf("请输入你的金额:\n");
           scanf("%d",&money);
           compare(L,money);
           system("pause");
           }
           return 0;
        }
2012-12-09 19:57
鹿言弓
Rank: 1
等 级:新手上路
帖 子:26
专家分:1
注 册:2012-11-14
收藏
得分:0 
回复 13楼 神龙赖了
我发现错啦,是我傻啦。。。
2012-12-11 18:20
快速回复:一变量在循环中发上变化
数据加载中...
 
   



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

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