C 永久循环有问题吗
但是如果我把它改成C 永久循环有问题吗,c,C,但是如果我把它改成 while(copy>0) 它正在工作…我试图弄清楚它为什么会永远循环,但我找不到答案..我正在递减复制,当它得到0时,它应该会从循环中断..我甚至添加了另一个检查 while(copy>1) 但是它仍然不起作用。有什么建议吗?谢谢你在copy=0时也在使用%。这是一个导致未定义行为的bug(除以零) prevcounter未初始化 代码如下所示:- if(copy==0)break; #包括 int main(){ int n,复制,计数器=0,前置计数器
while(copy>0)
它正在工作…我试图弄清楚它为什么会永远循环,但我找不到答案..我正在递减复制,当它得到0时,它应该会从循环中断..我甚至添加了另一个检查
while(copy>1)
但是它仍然不起作用。有什么建议吗?谢谢你在
copy=0时也在使用%
。这是一个导致未定义行为的bug(除以零)
prevcounter
未初始化
代码如下所示:-
if(copy==0)break;
#包括
int main(){
int n,复制,计数器=0,前置计数器=0,前置;
scanf(“%d”和“&n”);
而(n>0)
{
计数器=0;
n--;
拷贝=n;
同时(复制>0)
{
--抄袭;
如果(复制(&n%copy==0){
计数器++;
}
}
如果(计数器>前置计数器){
前置计数器=计数器;
prev=n;
}
}
printf(“%d”,上一页);
}
您需要考虑在执行过程中可能出现的<>代码>拷贝/代码>的所有值。在此循环中,您将排除
copy
变为零的情况,并且if(copy&&n%copy==0)
也确保了当copy=0时您正在使用%
。这是一个导致未定义行为的bug(除以零)
prevcounter
未初始化
代码如下所示:-
if(copy==0)break;
#包括
int main(){
int n,复制,计数器=0,前置计数器=0,前置;
scanf(“%d”和“&n”);
而(n>0)
{
计数器=0;
n--;
拷贝=n;
同时(复制>0)
{
--抄袭;
如果(复制(&n%copy==0){
计数器++;
}
}
如果(计数器>前置计数器){
前置计数器=计数器;
prev=n;
}
}
printf(“%d”,上一页);
}
您需要考虑在执行过程中可能出现的<>代码>拷贝/代码>的所有值。在此循环中,您将排除
copy
变为零的情况,并且if(copy&&n%copy==0)
确保在初始化前使用prevcounter
。这意味着prevcounter
的值将是不确定的(并且看起来是随机的)。此外,如果循环以copy==1
进入,则您执行--copy
制作copy==0
。在除法中使用它,导致被零除法和未定义的行为。我建议您这样做,因为如果在调试器中单步执行代码,这个问题应该非常明显(尽管即使在逻辑上考虑它时也很明显)执行代码>时,在if(n%copy==0){
中执行0除法。while
循环中的缩进不良使代码具有欺骗性。奇怪的是,if(copy==0)break;
作为while(copy>0)中的最后一条语句
循环。您应该重新考虑您尝试执行的任何操作的逻辑。在初始化之前使用prevcounter
。这意味着prevcounter
的值将是不确定的(并且看起来是随机的)。此外,如果循环以copy==1
的形式进入,则执行--copy
生成copy==0
。然后在除法中使用它,导致被零除法和未定义的行为。我建议您这样做,因为如果在调试器中单步执行代码,这个问题应该非常明显(即使从逻辑上考虑,这一点也很明显。)我认为当执行if(copy==0)break;
时,在if(n%copy==0){
中执行0除法。while
循环中的缩进不良使得代码具有欺骗性。看到if(copy==0)很奇怪break;
作为while(copy>0)
循环中的最后一条语句。你应该重新思考你正在尝试做的任何事情的逻辑。谢谢你解决了这个问题。关于模:D我会记住的谢谢你解决了这个问题。关于模:D我会记住的
#include <stdio.h>
int main(){
int n,copy,counter=0,prevcounter=0,prev;
scanf("%d",&n);
while(n>0)
{
counter = 0;
n--;
copy = n;
while(copy>0)
{
--copy;
if(copy && n%copy==0){
counter++;
}
}
if(counter>prevcounter){
prevcounter = counter;
prev = n;
}
}
printf("%d",prev);
}