hello`world 发表于 2017-8-17 11:30:44

程序陷入死循环了,大神们帮帮忙吧!

自己编写的fun(),其他的是试卷给出的
#include <conio.h>
#include <stdio.h>
#include <windows.h>/*自己编写的fun(),其他的是试卷给出的*/



unsignedfun ( unsignedw )
{
int i,j,z;
unsigned m=1,n;
i=1;
z=w/10;
while(z!=0)
{z=w/10;
        i++;
        printf("1111");
}
for(j=1;j<i;j++)
{
        m=m*10;
}
n=w%m;
return n;

}




void NONO( )
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
    输出数据,关闭文件。 */
unsigned x ;
int i ;
FILE *rf, *wf ;

rf = fopen("bc5.in", "r") ;
wf = fopen("bc5.out", "w") ;
for(i = 0 ; i < 20 ; i++) {
    fscanf(rf, "%u", &x) ;
    fprintf(wf, "%u\n", fun(x)) ;
}
fclose(rf) ;
fclose(wf) ;
}
main( )
{   unsignedx;
    system("cls");
    printf ( "Enter a unsigned integer number :" ); scanf ( "%u", &x );
    printf ( "The original data is :%u\n", x );
    if ( x < 10) printf ("Data error !");
    else printf ( "The result:%u\n", fun ( x ) );
    NONO( );
}
{:9_229:}

lumber2388779 发表于 2017-8-17 11:37:36

目前看到的情况是卡在while(z!=0),你调试下将z的值 或者上一层x的值打印出来就能知道

ba21 发表于 2017-8-17 13:55:26

跟拒你的题意,这样可否,参考代码:
unsignedfun(unsignedw)
{
        unsigned z,result,i;
        z=w;

        i = 1;
        result = 0;
        while(1)
        {               
                result += (z % 10) *i;
                i*=10;
                z /= 10;
                if(z/10 == 0)//判断下一位是否为最后一位
                        break;
        }

        return result;

}

hello`world 发表于 2017-8-17 15:35:32

ba21 发表于 2017-8-17 13:55
跟拒你的题意,这样可否,参考代码:

谢谢兄台,不过我还是很纠结我写的代码,我找不出错来,蓝瘦

ba21 发表于 2017-8-17 15:49:02

本帖最后由 ba21 于 2017-8-17 15:52 编辑

hello`world 发表于 2017-8-17 15:35
谢谢兄台,不过我还是很纠结我写的代码,我找不出错来,蓝瘦

while(z!=0)
{z=w/10;
      i++;
      printf("1111");
}
这么明显的错,还要怎么找???
w/10 你 z 你什么时候才能=0;z一直都保持一个数。

unsignedfun ( unsignedw )
{
int i,j,z;
unsigned m=1,n;
i=1;
z=w/10;
while(z!=0)
{z=z/10;
      i++;
      printf("1111");
}
for(j=1;j<i;j++)
{
      m=m*10;
}
n=w%m;
return n;

}

hello`world 发表于 2017-8-17 15:49:22

lumber2388779 发表于 2017-8-17 11:37
目前看到的情况是卡在while(z!=0),你调试下将z的值 或者上一层x的值打印出来就能知道

聪明,但是不行

lumber2388779 发表于 2017-8-17 17:49:18

ba21 发表于 2017-8-17 15:49
while(z!=0)
{z=w/10;
      i++;


w为个位数的时候z就是0了

lumber2388779 发表于 2017-8-17 17:50:29

lumber2388779 发表于 2017-8-17 17:49
w为个位数的时候z就是0了

是因为打印太多吗?我记得VS可以单步调试看出来的,还不行我再帮你调试下

ba21 发表于 2017-8-17 19:44:40

哪里不行了?这不是好好的。

DAY 发表于 2017-8-19 20:19:24

感觉贴吧大神很牛逼!{:5_106:}{:5_106:}{:5_106:}

hello`world 发表于 2017-8-24 17:31:45

ba21 发表于 2017-8-17 15:49
while(z!=0)
{z=w/10;
      i++;


ao huangrandawu {:9_239:}谢谢你

hello`world 发表于 2017-8-24 17:32:31

lumber2388779 发表于 2017-8-17 17:49
w为个位数的时候z就是0了

谢谢,嘿嘿,太马虎了
页: [1]
查看完整版本: 程序陷入死循环了,大神们帮帮忙吧!