WHILE循环中IF语句的问题
我想写一个程序,其中用户在程序中输入一个整数,然后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;
}
是的,你会击中一个3位数的无限循环,而NUM在while循环中根本不会改变。根据你的逻辑,你必须使用a = a/10而不是a = Num/10,在while循环之前初始化a = Num。
顺便说一句,通过使用“mod”和“division”,有更简单的方法来做你想做的事情。
我想我很困惑,因为我认为我在if语句中改变了Num的值,它嵌套在while循环中。 我只希望Num的值改变一次,我知道需要多少计数才能将值更改为低于10. – iclarke85 2013-05-01 01:09:04
当然,请尝试建议并接受适合您的答案。也考虑使用mod和除法。例如:769%10给出9.(int((769/10)给出76.获得提示?希望它有帮助 – Sudhee 2013-05-01 01:14:18
@Statatak在'if'语句中更改'Num'的唯一方法是*输入* ifblock,并且只有在出现'(a WhozCraig 2013-05-01 01:41:58
这是你的问题:
while (Num>=10) {
a=Num/10;
if (a<10) {
如果200进入? a将是20,并且不会输入if语句。
我不知道你想完成什么,但你可能会考虑:
while (Num>=10) {
Num=Num/10;
if (a<10) {
此外,这是良好的编码习惯在C没有把握的变量名。
为什么不使用的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
}
我不惊讶,你不能自己调试这段代码。这根本不可读。 – 2013-05-01 00:52:50
我必须诚实地同意我甚至不确定你在那里做什么。 – Nomad101 2013-05-01 00:54:31
请通过适当缩进并添加注释来清理代码。阅读未注释的,无意义的代码非常困难。 – templatetypedef 2013-05-01 01:01:30