首页
学习
活动
专区
工具
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之外的独立对象(存储空间...因为按值传递,将原变量中的地址值,复制给新变量 新旧变量用相同的地址值,引用了同一个对象 用新变量修改对象,等效于直接修改原对象。

    81920

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

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

    92610

    编程时常见的8种错误

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

    78110

    编程时常见的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值 ---- 运行可执行程序后,who的pid值就是父进程的pid 17号信号就是SIGCHLD 同时通过waitpid

    19210

    【C语言】循环语句

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

    1K20

    刷题-检查点重复次数不定的解决方案:scanf的返回值

    事情是这样的,在今天的快乐刷题中,我遇见了一个题目: 试题内容 试题以及部分检查点 错误思路 第一次尝试 ummm,看上去很简单:int的范围是 -2^31 到 2^31 - 1,所以直接定义两个整形变量...第一次错误 第二次尝试 观察了一下,原来是需要添加一个循环。 此时我还没有意识到事情的严重性,高高兴兴的添加了一个for()循环结构,然后在printf()中添加转义字符”\n“进行换行。...为什么会这样? 输入的次数不确定? 为什么scanf在没有接受到新的值的时候还会执行下一步? 啊?这是什么题?我没见过啊?...基于这个性质,我编写了一个while循环 while(scanf("%d%d", &a, &b) == 2){} 这个循环首先会调用scanf函数,然后对scanf的返回值进行值判断,当scanf成功接收了...动态输入处理 在处理动态数量的输入时,scanf的返回值可以用来确定实际读取了多少个输入项,从而进行相应的处理。

    7310

    Java多线程第二篇-线程的常用方法和线程安全

    1.需要手动创建变量。 2.当线程内部在sleep的时候,主线程修改为ture,这时候结束了循环,但是新的线程内部无法及时的做出响应。 这时候我们就要通过Java中的本地方法来进行线程的中断。...计算机在运行过程中需要访问数据,这些数据会放在内存中(定义一个变量时,变量就是在内存中)。...cpu在使用这个变量时,就会把这些内存中的数据读取出来,放到cpu的寄存器中参与运算(load读取内存值放到寄存器中)。 寄存器读取速度>内存读取速度>硬盘读取运算。...1.load读取内存中的isQuit值放入寄存器中。 2.通过cmp指令比较寄存器中的值是否为0,绝对是否要继续循环。...此时编译器则为了更方便的操作,只有第一次循环时读取内存器,后续不在读取内存,而是直接从寄存器中取isQuit的值,此时内存中无法读取数据编译器却没有进行读取,而是一直在寄存器中执行,此时就出现了bug。

    6510

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

    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变量,是因为我要在循环结束后查看结果,如果定义在循环里面,每次都会被初始化,无法计算累加结果,所以在循环里计算,在循环外保存,每次计算完成,更新变量的值

    52830

    Shell流程控制

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

    92100

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

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

    89710

    第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

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

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

    79130

    抽丝剥茧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

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

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

    3.2K30

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

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

    12210

    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.6K10

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

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

    1.4K60
    领券