c语言循环中的 变量定义位置很重要

wang_xiao_qiang 2013-05-24 11:57:26
#include <stdio.h>
int main()
{
while(1){
int n;
int s;
printf("请输入一个 数");
scanf("%d",&n);
printf("你输入的数是%d",n);
s++;
if(s<4){
break;
}
}
return 0;
}
其中 为什么break会没用,导致还是无限循环,其中定义的s为什么要定义在while外面才在循环中有用,求多方面详解
...全文
434 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
邓志勇 2013-05-27
  • 打赏
  • 举报
回复
首先s没有初值 其次如果定义了初值,如s=0,但s为局部变量,每次循环开始都是0,所有每次s<4都成了,即死循环。 除非定义成静态变量如static s=0,或者s定义成全局变量,这样才不会死循环
赵4老师 2013-05-27
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实! 有人说一套做一套,你相信他说的还是相信他做的? 其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗? 不要写连自己也预测不了结果的代码!
明月书君 2013-05-27
  • 打赏
  • 举报
回复
引用 10 楼 starytx 的回复:
[quote=引用 8 楼 zengzhihao 的回复:] [quote=引用 4 楼 starytx 的回复:] 首先s没有初始化,是个不确定的值,最好不要使用 其次你的s放在循环内定义,说明每次的循环都是一个新的s,如果s的初始值不小于3,你的循环就永远不会跳出,因为,s++ 后永远不会小于4。看看基础吧
“其次你的s放在循环内定义,说明每次的循环都是一个新的s“ 这个s应该不是每次循环都是新的 ,只是每次循环会重新赋值为0,只会定义一次。[/quote]谁告诉你每次重新赋值为0的?全局变量才会被自动初始化为0[/quote]正解
明月书君 2013-05-27
  • 打赏
  • 举报
回复
引用 8 楼 zengzhihao 的回复:
[quote=引用 4 楼 starytx 的回复:] 首先s没有初始化,是个不确定的值,最好不要使用 其次你的s放在循环内定义,说明每次的循环都是一个新的s,如果s的初始值不小于3,你的循环就永远不会跳出,因为,s++ 后永远不会小于4。看看基础吧
“其次你的s放在循环内定义,说明每次的循环都是一个新的s“ 这个s应该不是每次循环都是新的 ,只是每次循环会重新赋值为0,只会定义一次。[/quote] 赋值为0不久break跳出了么
常如意 2013-05-26
  • 打赏
  • 举报
回复
定义变量,需要使用到变量值的时候初始化一下是必要的
bewinged 2013-05-26
  • 打赏
  • 举报
回复
当int s = 0时
bewinged 2013-05-26
  • 打赏
  • 举报
回复
引用 10 楼 starytx 的回复:
[quote=引用 8 楼 zengzhihao 的回复:] [quote=引用 4 楼 starytx 的回复:] 首先s没有初始化,是个不确定的值,最好不要使用 其次你的s放在循环内定义,说明每次的循环都是一个新的s,如果s的初始值不小于3,你的循环就永远不会跳出,因为,s++ 后永远不会小于4。看看基础吧
“其次你的s放在循环内定义,说明每次的循环都是一个新的s“ 这个s应该不是每次循环都是新的 ,只是每次循环会重新赋值为0,只会定义一次。[/quote]谁告诉你每次重新赋值为0的?全局变量才会被自动初始化为0[/quote] 哦,没说清楚 是当int a = 0;时
starytx 2013-05-26
  • 打赏
  • 举报
回复
引用 8 楼 zengzhihao 的回复:
[quote=引用 4 楼 starytx 的回复:] 首先s没有初始化,是个不确定的值,最好不要使用 其次你的s放在循环内定义,说明每次的循环都是一个新的s,如果s的初始值不小于3,你的循环就永远不会跳出,因为,s++ 后永远不会小于4。看看基础吧
“其次你的s放在循环内定义,说明每次的循环都是一个新的s“ 这个s应该不是每次循环都是新的 ,只是每次循环会重新赋值为0,只会定义一次。[/quote]谁告诉你每次重新赋值为0的?全局变量才会被自动初始化为0
绯红女王 2013-05-25
  • 打赏
  • 举报
回复
s未初始化,导致s未定义,所以s的值是随机的~~~
bewinged 2013-05-25
  • 打赏
  • 举报
回复
引用 4 楼 starytx 的回复:
首先s没有初始化,是个不确定的值,最好不要使用 其次你的s放在循环内定义,说明每次的循环都是一个新的s,如果s的初始值不小于3,你的循环就永远不会跳出,因为,s++ 后永远不会小于4。看看基础吧
“其次你的s放在循环内定义,说明每次的循环都是一个新的s“ 这个s应该不是每次循环都是新的 ,只是每次循环会重新赋值为0,只会定义一次。
AnYidan 2013-05-25
  • 打赏
  • 举报
回复
The c programming language 4.4 Scope Rules
max_min_ 2013-05-24
  • 打赏
  • 举报
回复
#include <stdio.h>
int main()
{
  while(1)
  	{
      int n;
    //  int s = 0;
	  static int s = 0; //初始化一下,定义成静态的就不用定义在外面也是OK的 
      printf("请输入一个 数");
      scanf("%d",&n);
      printf("你输入的数是%d",n);
      s++;//你把S定义在里面,while 一次循环完之后,就被系统回收了
	  //第二次循环又重新分配的,所以进来的s一直就只进行一直++ 
      if(s<4)
	 	{
           break;
       }
     }
  return 0;
}
lin5161678 2013-05-24
  • 打赏
  • 举报
回复
s 没初值 直接 ++ 未定义行为 你不管是放在循环内 还是循环外 都是错的 s 给初值 [假设初值是0] 你自己看吗 如果是在循环内部 每次一进入循环就把s处理为0 然后 +1 然后再次进入循环 又把s处理为0 然后再 +1 s就是一直是 0 1 0 1 0 1 ....... 当然死循环
hugett 2013-05-24
  • 打赏
  • 举报
回复
导致死循环主要是你的s没有初始化。。可能是一个随机的值。。如果这个值大于等于3。。你的程序就死循环了。。

#include <stdio.h>
int main()
{
	while(1){
		int n;
		int s = 0;//s初始化。。
		printf("请输入一个数");
		scanf("%d",&n);
		printf("你输入的数是%d", n);
		s++;
		if(s<4){
			break;
		}
	}
	return 0;
}
赵4老师 2013-05-24
  • 打赏
  • 举报
回复
代码功能不是被人看出来的;而是被单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中分析出来的。 单步调试和设断点调试是程序员必须掌握的技能之一。
starytx 2013-05-24
  • 打赏
  • 举报
回复
首先s没有初始化,是个不确定的值,最好不要使用 其次你的s放在循环内定义,说明每次的循环都是一个新的s,如果s的初始值不小于3,你的循环就永远不会跳出,因为,s++ 后永远不会小于4。看看基础吧
begodliker 2013-05-24
  • 打赏
  • 举报
回复
要么定义成全局变量,要么定义成静态变量,记得初始化

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧