2013-05-01 287 views
-1

我想写一个程序,其中用户在程序中输入一个整数,然后C按顺序返回该整数的每个数字。为了实现这一点,我试图将输入的整数除以10的因子并循环,直到我最终达到最后一位。不幸的是,我的循环存在问题。 2位数字工作正常,但3位或更多,我进入一个无限循环。任何人有什么建议我要去哪里错了?WHILE循环中IF语句的问题

int main() 
{ 
    int Num; 
    int a; 
    int count=0; 

    printf("Enter an integer > "); 
    scanf("%d", &Num); 
    printf("**Digits Forward!**\n"); 

    if (Num<10) { 
     printf("Final digit: %d\n",Num); 
     printf("**Digits Reverse!**\n"); 
     printf("Final digit: %d\n",Num); 
     printf("That's all, have a nice day!\n"); 
    } ///No Problems So far. 

    else { 
     while (Num>=10) { 
      a=Num/10; 
      count=count+1; 
      if (a<10) { 
       printf("Digit: %d\n", a); 
       Num = Num-pow(10,count)*a; 
       count=0; 
      } 
     } 
    } ///Having trouble in this loop. Why doesn't it loop using the new Num and count values? 
    printf("Final digit: %d\n",Num); 

    return 0; 
} 
+1

我不惊讶,你不能自己调试这段代码。这根本不可读。 – 2013-05-01 00:52:50

+1

我必须诚实地同意我甚至不确定你在那里做什么。 – Nomad101 2013-05-01 00:54:31

+1

请通过适当缩进并添加注释来清理代码。阅读未注释的,无意义的代码非常困难。 – templatetypedef 2013-05-01 01:01:30

回答

0

是的,你会击中一个3位数的无限循环,而NUM在while循环中根本不会改变。根据你的逻辑,你必须使用a = a/10而不是a = Num/10,在while循环之前初始化a = Num。

顺便说一句,通过使用“mod”和“division”,有更简单的方法来做你想做的事情。

+0

我想我很困惑,因为我认为我在if语句中改变了Num的值,它嵌套在while循环中。 我只希望Num的值改变一次,我知道需要多少计数才能将值更改为低于10. – iclarke85 2013-05-01 01:09:04

+0

当然,请尝试建议并接受适合您的答案。也考虑使用mod和除法。例如:769%10给出9.(int((769/10)给出76.获得提示?希望它有帮助 – Sudhee 2013-05-01 01:14:18

+1

@Statatak在'if'语句中更改'Num'的唯一方法是*输入* ifblock,并且只有在出现'(a <10)'时才会发生。你看到了吗?(希望如此,你写的)呃,什么决定了'a'的值?上面的这行代码的内容如下:'a = Num/10'。所以现在我们知道,除非'(Num/10 <10)'为真,否则我们不输入if块。 “Num”的值是否正确?任何值,例如'Num <100'。因此,传递大于100的任何东西,if块永远不会执行,因此'Num'永远不会改变,因此*无限循环*。 – WhozCraig 2013-05-01 01:41:58

2

这是你的问题:

while (Num>=10) { 
     a=Num/10; 
     if (a<10) { 

如果200进入? a将是20,并且不会输入if语句。

我不知道你想完成什么,但你可能会考虑:

while (Num>=10) { 
     Num=Num/10; 
     if (a<10) { 

此外,这是良好的编码习惯在C没有把握的变量名。

0

为什么不使用的sprintf转换数(在这种情况下整数)字符数组,然后在其上遍历像这样的:

接受输入并且然后使用的sprintf

int x,i=0; 
    char str[5]; // 5 digits max - but you could change it 
    printf("Enter an Integer"); 
    scanf("%d",&x); 
    sprintf(str,"%d",x); 

转换成字符数组然后遍历

while (str[i]!='\0') 
    { 
    \\ printing and testing here 
    }