首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么while循环在第一次运行后没有循环?While循环无法读取变量的新值

在编程中,while循环是一种迭代结构,它会根据给定的条件重复执行一段代码块,直到条件不再满足为止。然而,如果在循环的代码块中没有更新循环条件所依赖的变量的值,那么循环将无法继续执行。

当while循环第一次运行后,它会检查循环条件是否满足。如果条件满足,循环会继续执行,否则循环会终止。在循环的代码块中,如果没有对循环条件所依赖的变量进行更新操作,那么循环条件将始终保持不变,导致循环无法再次执行。

解决这个问题的方法是在循环的代码块中更新循环条件所依赖的变量的值。这样,每次循环执行时,都会重新计算循环条件,并根据条件的结果决定是否继续执行循环。

以下是一个示例,演示了如何在while循环中更新变量的值:

代码语言:python
代码运行次数:0
复制
count = 0
while count < 5:
    print("Count:", count)
    count += 1  # 更新count的值,使其逐步增加

在上述示例中,count变量的初始值为0。在每次循环中,首先打印count的值,然后通过count += 1语句将count的值增加1。这样,每次循环执行时,count的值都会更新,直到count不再小于5为止。

总结起来,如果while循环在第一次运行后没有循环,很可能是因为循环条件所依赖的变量没有被更新。确保在循环的代码块中更新循环条件所依赖的变量的值,以确保循环能够正确执行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

第十六章 Shell编程

,输出一次hell,然后shu自我增加一次(取出shu,加1再赋值给shu)得到shu为2,到这里第一次循环结束.然后再次返回判断部分,shu为2,小于等于100,判断成立,再次进入代码,以此类推...死循环循环没有更新语句,造成判断条件永远成立,致使代码运行循环,不再停止、跳出。...以上所有案例,我们看到都是有固定循环次数,其实while也可以支持没有固定次数循环操作,如下例: jiXu="y"; # 为了满足第一次循环,赋初值为y while [ $jixu...,就是选择结构,这个结构java、C语言中是没有的,下面来看一下它语法格式: select 变量 in 1 2 3 ......需要解释是,当read读取成功,即等于读取操作结果为true,正适合于while判断;而当读取完文件最后一行,再次读取读取失败,则视为false结果,所以while循环将停止。

1.1K51
  • JavaScript秘密笔记 第四集

    循环体: 循环反复执行代码段 死循环: 循环条件永远满足,导致循环无法自动退出 如何: 3种: 1. while循环: 声明并初始化循环变量; while(循环条件){//只要/当...时候...do...while是至少可以执行一次 3. for循环: 简化版while循环: for(声明并初始化循环变量;循环条件; 修改循环变量){ 循环体 } 局限: 只能在循环体执行,才修改循环变量...何时: 只有循环变量变化有规律时,才用for循环 如果循环变量变化没有规律,就用while循环 更简化: 1. for循环第一部分,可同时声明并初始化多个变量 2. for循环第三部分...不限制下标越界 ***数组是引用类型对象: 什么是对象: 内存中存储多个数据一块独立存储空间 什么是引用类型: 无法保存在变量本地数据类型 实际数据都存储window之外独立对象(存储空间...因为按传递,将原变量地址,复制给变量 新旧变量用相同地址,引用了同一个对象 用变量修改对象,等效于直接修改原对象。

    81620

    一个困扰我122天技术问题,我好像知道答案了。

    第一次程序改造 那我把上面这题变一下,改变成下面这样: ? 仅仅在程序第 24 行加入了一个输出语句,用于输出每次循环时 flag 。其他地方没有任何变化。...由于变量 flag 没有被 volatile 修饰,而且子线程休眠 100ms 中, while 循环 flag 一直为 false,循环到一定次数,触发了 jvm 即时编译功能,进行循环表达式外提...比如下面的程序,注释了 14 行和 16 行,while 循环循环了3359次(该次数视机器情况而定),就读到了 flag 为 true,还没有触发即时编译,所以程序正常结束。 ?...(所以有同步操作) 因此,如果使用 System.out.println, JVM 将无法循环期间缓存变量。 这就是为什么,当有 print 语句时,循环可以正常结束,尽管这不是一个正确操作。...从本质上来说,线程释放锁操作,会强制性将工作内存中涉及释放锁之前,所有写操作都刷新到主内存中去。 而获取锁操作,则会强制重新加载可访问到该线程工作内存中去。

    91510

    编程时常见8种错误

    (Y/N)"; cin>>x; } 上面的代码会将是一个死循环~~像风一样自由~~~ 代码循环条件判断时使用了一个等号来检查是否相等,实际上程序执行时会把表达式右边赋给左边变量,实际上是执行了变量赋值...C++中,一旦给某一个变量赋值,这个变量就不会改变,除非给他重新赋值。...cout<<count<<";"; count++; } return 0; } 上面的代码执行时,并不能像预期那样进入while循环,因为C++中,整型变量并不会默认赋值...,但是实际运行输出是:100;原因是for语句后面多打了一个分号。...因此在编程时切记:分号不能出现在if语句、循环或函数定义之后。如果您在这些位置中放置了一个,您程序将无法正常运行

    76810

    编程时常见8种错误

    (Y/N)"; cin>>x; } 上面的代码会将是一个死循环~~像风一样自由~~~ 代码循环条件判断时使用了一个等号来检查是否相等,实际上程序执行时会把表达式右边赋给左边变量,实际上是执行了变量赋值...C++中,一旦给某一个变量赋值,这个变量就不会改变,除非给他重新赋值。...while循环,因为C++中,整型变量并不会默认赋值0.在上面的代码中count可以是int范围内任何。...,但是实际运行输出是:100;原因是for语句后面多打了一个分号。...因此在编程时切记:分号不能出现在if语句、循环或函数定义之后。如果您在这些位置中放置了一个,您程序将无法正常运行

    1K40

    【Linux】volatile | SIGCHLD | 多线程概念

    1. volatile vscode中,创建signal.c文件 故意在while没有写代码块,让编译器认为main中,quit只会被检测 ---- 运行可执行程序,当输入 2号信号时,调用自定义方法将...2号信号,只调用了对应自定义方法,说明进入main中while循环 无法停止 ---- 全局变量被加载到内存中 while循环判断实际上是一种计算,会在CPU去执行 进行计算时,将内存中数据load...2号信号,调用自定义方法,quit变为1, 但是CPU中依旧quit为0,修改了内存中quit,那CPU中quit就无法影响内存quit了 一直使用quit为0,所以while循环无法退出 -...quit变量进行寄存器级别的优化,保证内存可见性 ---- 再次运行可执行程序,输入2号信号,跳出while循环,执行main中printf打印 2.SIGCHLD信号 子进程在运行时会退出,若父进程不关心子进程退出...,会向父进程发送信号SIGCHLD 调用对应自定义方法,打印出对应信号以及父进程pid ---- 运行可执行程序,whopid就是父进程pid 17号信号就是SIGCHLD 同时通过waitpid

    16310

    【C语言】循环语句

    如果第一次检验时候条件就满足的话,那么第一次或其后循环过程中,必须要有使条件为"假"操作,不然程序会无法终止,陷入到死循环当中。...:5050 ---- 代码分析 程序运行到 [while] 时,因为 i = 1,i <=100 成立(表达式为"真"),所以会执行循环体;执行结束 i 变为 2,sum 变为 1。...[while] 循环整体思路是这样:设置一个带有变量循环条件,也即一个带有变量表达式;循环体中额外添加一条语句,让它能够改变循环条件中变量。...:5050 代码示例分析 程序运行while 时,因为 i=1,i<=100 成立,所以会执行循环体;执行结束 i 变为 2,sum 变为 1。...while 循环整体思路是这样:设置一个带有变量循环条件,也即一个带有变量表达式;循环体中额外添加一条语句,让它能够改变循环条件中变量

    1K20

    想学清楚循环 先搞定这个小学题目吧

    for 循环 废话不多,先上图,左边是for循环,右边是while循环 ? 2种循环对比 左边for循环,是计算从0加到100最后,右边是while循环,从0打印到100。...要素都一样,所以说我们大部分情况是可以使用for循环替代while循环。 再来看我标注出来表达式1 :初始化条件,2:循环条件,3:循环体,4:迭代条件,为什么要标注一个1,2,3,4?...因为他们是有执行顺序。顺序是这样,首先运行表达式1,再运行2,如果 2 返回是 true,就开始运行3,这里是计算了一个加法,做完加法再运行4。...这里顺序一定要弄清楚,2后面就开始运行3,不要认为是运行4。这是第一次循环顺序,第二次就不一样了,直接2,3,4跳过了1,为什么?...回到for循环,我们之所以for循环外面定义sum变量,是因为我要在循环结束查看结果,如果定义循环里面,每次都会被初始化,无法计算累加结果,所以循环里计算,循环外保存,每次计算完成,更新变量

    52230

    Shell流程控制

    ,expr3 是每轮循环执行语句,一般用来更改条件判断相关变量。...结构开始运行while 结构中 read 命令从标准输入中读取,也就是从管道中读取数据,每次读取一行,因为管道中最初没有数据,所以 read 命令被阻塞处于数据等待状态。...但注意,管道两边命令默认是子 Shell 中执行,所以其设置变量命令执行完成就消失。换句话说,父 Shell 中无法访问这些变量。...比如上面的 num 变量管道 while 结构中设置,除了 while 中能访问该变量,其它任何地方都无法访问它。 如果想要访问 while 中赋值变量,就不能使用管道。...注:REPLY 变量一般是序号,但用户可以不按常理出牌,随意输入,所以 REPLY 保存不一定是序号。 另外,用户做出选择 select 会执行相关命令,执行完命令后会再次让用户选择。

    90900

    《零基础看得懂C++入门教程 》——(5) 容我套个娃 循环

    循环可以通过默认判断条件跳出,也可以自己编写控制语句实现循环跳出或忽略。 2.1 了解while循环使用方法 为什么需要循环循环有什么作用?循环就是重复执行某一段代码。...while循环是一个圆括号,圆括号中需要添加是条件,也就是一个表达式,在这里填写是i<10,表示该循环需要循环10次,为什么要写这个i<10我们接着往下看;圆括号,我们使用了一堆花括号,花括号内编写我们需要循环代码...通过以上所述,我们明白了变量i是循环代码内,每次循环都会增加1;由于这个特性,变量i循环第一次时候就变成了1,第二次就变成了2,那么总有一次是大于或者等于10,我们需要循环10次,那么就需要在条件处添加...循环变量i我们可以通过输出方式查看变量i,更改代码如下: #include using namespace std; int main() { int i=0;...使用分号隔开,是i<10这一个判断,表示每次循环需要判断这个表达式是否正确,如果i不小于10则不再执行循环,随后使用分号表示结束;之后i++表示每次循环i这个变量加1,第一次0+1变量i为1,第二次时候则

    86510

    Java 并发编程(三):如何保证共享变量可见性?

    我们使用同步目的不仅是,不希望某个线程使用对象状态时,另外一个线程修改状态,这样容易造成混乱;我们还希望某个线程修改了对象状态,其他线程能够看到修改状态——这就涉及到了一个名词:内存(可省略...:主线程中创建子线程,然后启动它,当主线程休眠 500 毫秒,把共享变量 chenmo 修改为 true 时候,子线程中 while 循环停下来。...但运行这段代码,程序似乎进入了死循环,过了 N 个 500 毫秒,也没有要停下来意思。 为什么会这样呢?...换句话说,就是:普通共享变量不能保证可见性,因为普通共享变量被修改之后,什么时候被写入主内存是不确定,当其他线程去读取时,此时内存中可能还是原来,因此无法保证可见性。...变量时,发现自己缓存副本无效了,就会去主内存读取最新(由 false 变为 true 了),于是 while 循环也就停止了。

    77830

    第2章:循环结构程序设计

    在给n做变换语句加一条输出语句printf("%d\n",n),将很快找到问题所在:第一次输出为-1332004332,它不大于1,所以循环终止。所以我们知道是乘法溢出了。...%d",&x)==1)//scanf返回是成功输入变量个数,当输入结束时,scanf函数无法再次读取x,将返回0 { s += x; if(x<min) min = x; if...根据“输出中间结果”方法,读者不难验证下面的结论:变量max一开始就等于 2293624(或者10),自然无法更新为比它小8。修改方法已经注明程序中。...样例输入最后增加第3组数据:10,会看到这样输出: Case 3:-4 10 0.000 相信读者已经意识到问题出在哪里了:min和max没有“重置”,仍然是上个数据结束。...很多情况下,仔细研究程序执行流程能够很好地帮助理解算法,特别是“当前行”和变量改变。有些变量是特别值得关注,如计数器、 累加器,以及“当前最小/最大”这样中间变量

    1.5K10

    linux中getchar函数用法,linux getchar函数使用

    输入这段字符串过程中getchar函数没有发生从stdin读取字符操作(因为没有任何字符输出),当在输入字符串按下回车界面输出情况如下: input your strings: hello...重新编译并运行程序,输入字符串:hello[回车] 得第一次运行结果 当程序首次执行到whilegetchar时,getchar函数等待用户输入,getchar函数一直等待用户输入,当用户按下回车表示用户输入完毕...,getchar开始逐个读取输入字符串,将用户输入所有字符读取完毕(因为while条件为真),再次等待用户输入: 此次输入字符’n’,注意输入字符’n’时位置,为什么不是o后面呢,而是换了一行而且相隔了一个空格呢...输入字符’n’没有按回车之前getchar函数是不会发生读操作,当在输入字符’n’按下回车程序就会结束(或者输入字符’n’再输入其它字符再按下会车,程序依然将会结束,只是字符’n’后面的字符不会被...getchar函数读取,因为while循环条件已经为假)并得到以下输出界面 String输入字符串长度为6一次表明getchar读取了用户输入回车。

    3.1K30

    抽丝剥茧C语言(中阶)分支语句和循环语句

    因为continue作用是,让本次循环continue后面的语句不执行,因为我们这个循环语句是小于等于10才会停止循环,而 i 这个变量变化是continue下面,所以 i 一直没有变,最终导致程序死循环...第一个是键盘上读取一个字符,第二个是输出你刚才读取字符,所以第一段代码运行是这样: 代码二是除了0到9不触发continue。...我们已经知道了while循环,但是我们为什么还要一个for循环呢?...4.2.3 for语句循环控制变量 建议: 不可在for 循环体内修改循环变量,防止 for 循环失去控制。 建议for语句循环控制变量取值采用“前闭开区间”写法。...因为刚开始初始化变量 i 和 j 为0,我们第一次进入第二个for循环时候,变量 j 还是从0开始,但是这一次循环变量 j 变成了10。

    1.7K00

    【Python】循环遍历傻傻分不清

    所谓死循环,指的是无法结束循环循环结构,例如将上面 while 循环count+ = 1代码注释掉,再运行程序你会发现,循环会一直继续下去。因为你循环判断条件永远都没有改变。...提示:实际上开发当中,除非能够确认元组当中数据类型,不然针对元组循环遍历需求要求并不是很多。 那么有小伙伴可能会问为什么元组对于for语句要求不是很多呢。...18 2.50 那么在这里杰斯下为什么for用于元组不适合↓ 使用格式字符串拼接 printf 这个变量是不方便。...语法如下 示例语法如下 for 迭代变量 in 对象: 循环体 迭代变量我们每一次循环中保存根据变量得到,对象既是有序序列,可以是字符串、元组、列表,也可以是无序序列,例如字典...stop:计数最后一位,不包含这个,当range(1,3)时候,等同于[1,2]是没有3这个数字使用时候一定要注意这一点。

    11110

    c语言循环中按键跳出,C语言跳出循环

    使用while或for循环时,如果想提前结束循环(不满足结束条件情况下结束循环),可以使用break或continue关键字。...使用 while 循环计算1加到100: #includeint main(){ int i=1, sum=0; while(1){ //循环条件为死循环 sum+=i; i++; if(i>100...当执行到第100次循环时候,计算完i++; i 为 101,此时 if 语句条件 i> 100 成立,执行break;语句,结束循环多层循环中,一个 break 语句只向外跳一层。...0;} 运行结果: 0123456789↙ 01236789 程序遇到while时,变量c为’\0’,循环条件c!...=’ ‘成立,开始第一次循环。get) 使程序暂停执行,等待用户输入,直到用户按下回车键才开始读取字符。

    3.5K10

    C语言 getchar()原理及易错点解析

    键盘输入字符都存到缓冲区内,一旦键入回车,getchar就进入缓冲区读取字符,一次只返回第一个字符作为getchar函数,如果有循环或足够多getchar语句,就会依次读出缓冲区内所有字符直到...’\n’.要理解这一点,之所以你输入一系列字符被依次读出来,是因为循环作用使得反复利用getchar缓冲区里读取字符,而不是getchar可以读取多个字符,事实上getchar每次只能读取一个字符...但是因为scanf()方法遇到非字符时候会结束从控制台获取,所以输入’abc’,按下 ‘回车(enter)’ 同时,将’abc’这个以字符串形式赋值给了类型为 ‘char’ ‘m’ 数组...但是a空格b+回车缓冲区这样存放: 因此,如果想要程序正常运行则需要在输出用户输入第一个字符串加入三次getchar();操作,即删除掉第二,第三,第四格内容。...='\n') continue; 可以看出这段代码代替了无数个getchar(),他作用是跳过剩余输入行 第一次while循环消除第二格缓存,第二次while循环消除第三格缓存……直到第八次

    1.3K60

    捕获了一只发生概率小于万分之一Bug

    该方法从输入流中读取数据下一个字节。返回0到255范围内int字节。如果因为已经到达流末尾而没有可用字节,则返回 -1 。该方法会处于阻塞状态,等待数据到达,直到返回为-1或抛出异常。...尝试读取len个字节,但读取字节也可能小于该。以整数形式返回实际读取字节数。 read (byte[] b):从输入流中读取一定数量字节,并将其存储缓冲区数组b中。...第一次循环,read读取6个字节长度,返回为6,recvLen赋值为6。第二次循环,off参数取recvLen为6,读取剩余4个字节(10 - 6)。...完成第二次读取循环本应该结束,但你会发现此时recvLen被赋值为4,依旧满足while循环判断条件(recvLen < bodyLen),进行下一轮读取。...改造点2 recvLen += currentLen; } System.out.println(new String(body, "GBK")); } 上述改造只改动了两处,将read方法返回变量接收

    18020

    兄dei,你被代码死循环坑了吗?

    = size; } 每次new了一个Itr对象时候cursor是默认0,肯定和元素个数不相等。所以导致while语句中条件一直都成立,所以才会出现死循环。...3.类中使用自己对象 有时候,某个类中把自己对象定义成成员变量,不知道你有没有这样做过。 有些可能会很诧异,为什么要这么做。...而@Autowired注入为什么没有问题? 因为@Autowired是ServiceA对象实例化成功之后,依赖注入阶段,把实例注入到成员变量serviceA。...,然后第一次调用递归方法时候level字段传1,每递归一次level加1,当发现level大于等于MAX_LEVEL时,说明出现了异常情况,则直接返回null。...1.3 自己写循环要注意什么? 不知道聪明小伙伴们有没有发现,我们自定义定时任务和生产者消费者例子中,也写了死循环,但跟上面其他例子都不一样,我们写循环没有出现问题,这是为什么

    2.1K20
    领券