为啥for 循环不执行?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥for 循环不执行?相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
int yesORno(int year)

if(year%4==0&&year%400!=0) return 1;
return 0;

void main ()

int day[2][12]=31,28,31,30,31,30,31,31,30,31,30,31,
31,29,31,30,31,30,31,31,30,31,30,31;
int y1,y2,m1,m2,d1,d2;
int count;
scanf("%d.%d.%d",&y1,&m1,&d1);
scanf("%d.%d.%d",&y2,&m2,&d2);
for(count=0;y1==y2&&m1==m2&&d1==d2;count++)

d1++;
if(d1>day[yesORno(y1)][m1])

d1=1;
m1++;
if(m1>12)

m1=1;
y1++;



printf("%d\n",count);

#include<stdio.h>
int yesORno(int year)

if(year%4==0&&year%100!=0||year%400==0) return 1;
return 0;

void main ()

int day[2][12]=31,28,31,30,31,30,31,31,30,31,30,31,
31,29,31,30,31,30,31,31,30,31,30,31;
int y1,y2,m1,m2,d1,d2;
int count;
scanf("%d.%d.%d",&y1,&m1,&d1);
scanf("%d.%d.%d",&y2,&m2,&d2);
for(count=0;!(y1==y2&&m1==m2&&d1==d2);count++)

d1++;
if(d1>day[yesORno(y1)][m1-1])

d1=1;
m1++;
if(m1>12)

m1=1;
y1++;



printf("%d\n",count);

改3个地方才能正确。
1.day[2][12]=31,28,31,30,31,30,31,31,30,31,30,31,
31,29,31,30,31,30,31,31,30,31,30,31;
要改成day[2][13]=0,31,28,31,30,31,30,31,31,30,31,30,31,
0,31,29,31,30,31,30,31,31,30,31,30,31;
2.if(year%4==0&&year%400!=0) return 1;要改为if(year%4==0 && year%100!=0 || year%400==0) return 1;
3.控制表达式y1==y2&&m1==m2&&d1==d2要改为y1!=y2 || m1!=m2 || d1!=d2.
参考技术A int day[2][12]=31,28,31,30,31,30,31,31,30,31,30,31,
31,29,31,30,31,30,31,31,30,31,30,31;

1、赋值错误
int day[2][12]=31,28,31,30,31,30,31,31,30,31,30,31,
31,29,31,30,31,30,31,31,30,31,30,31;
2、循环条件不对
如果d1==d2,y1=y2,m1=m2,经过下面的一轮计算后,d1 和d2不相等了,自然循环不循环了
参考技术B y1==y2&&m1==m2&&d1==d2

这个条件为假时,就不执行了,

为啥我的代码在执行时的初始嵌套 for 循环中进入无限循环?

【中文标题】为啥我的代码在执行时的初始嵌套 for 循环中进入无限循环?【英文标题】:Why does my code enter into an infinite loop at the initial nested for loop on execution?为什么我的代码在执行时的初始嵌套 for 循环中进入无限循环? 【发布时间】:2020-09-20 11:30:13 【问题描述】:

我试图纠正的这段代码是针对 Hackerrank 上的 C++ 程序的属性解析器问题。 代码还没有完成,因为我一次又一次地进入这个可怕的无限循环,因为我无法解决它。

代码:

struct tag
    char name[100];
    char att[100][100];
    char val[100][100];
;

int main()

    tag tags[100];
    char line[200];
    int n,q;
    cin>>n>>q;

    int a,b,c,flag;
    a=0;

    for(int i=0;i<n;i++)
        cin.getline(line,200);

        b=c=flag=0;

        int j;
        if(flag==0)
            for(j=1;line[j]!=' '||line[j]!='>';j++)
               tags[a].name[j]=line[j];
                cout<<"!";
                
            flag=1;
        
        else if(flag==1)
            while(line[j]!='>')
                for(j+=1,c=0;line[j]!=' '||line[j]!='=';j++,c++)
                    tags[a].att[b][c]=line[j];
                
                while(line[j]!='"')
                    j++;

                for(j+=1,c=0;line[j]!='\"';j++,c++)
                    tags[a].val[b][c]=line[j];
                
                b++;
            
            a++;
        
    

    cout<< tags[0].name[0];
    return 0;

另外,我是 Coding 的新手。建设性的批评将不胜感激:))

【问题讨论】:

给变量起有意义的名字。例如,flag 不会告诉读者该变量的作用。作为猜测(并且需要猜测说明了问题),它可能是first_time 【参考方案1】:

在这种情况下:

line[j]!=' ' || line[j]!='>'

对于line[j] 的任何值,析取条件之一将为真。这会导致无限循环。

您正在寻找:

line[j]!=' ' && line[j]!='>'

【讨论】:

【参考方案2】:
for(j=1;line[j]!=' '||line[j]!='>';j++) 

应该是

for(j=1;line[j]!=' '&& line[j]!='>';j++)

你也永远不会进入 else 部分,因为在迭代开始时你设置 flag==0 并且 if(flag==0) 总是为真

【讨论】:

但是我在检查 flag==0 的函数中将标志设置为 1。所以,我想我可以进入 else 块。 你设置 flag=1,没关系。但在下一次迭代开始时,标志将再次初始化为 0 ( b=c=flag=0; ),然后再检查条件。让我知道您的 else 块是否正在执行此更改。 是的,这是故意的,因为我想在每次迭代开始时运行一次

以上是关于为啥for 循环不执行?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个for循环不执行?

JS函数中for循环结束后为啥不执行下条语句,怎么让其执行?

golang for循环取值为啥不按顺序输出?

尽管条件仍然成立,为啥这个 for 循环似乎没有执行?

c语言一个死循环中为啥执行完一个功能函数就退出了?

for循环为啥在括号外面打印的值加1呢