c语言程序出现死循环

程序出现问题部分如下:
int main()
{
char a[81];
int i=0,j=0;
while ((a[i]=getchar())!='\n')
i++;
a[i]='\0';
while (a[j]=='0'&&a[j+1]!='\0')
j++;
if (j!=0)
for (i=0;i<=(strlen(a)-j);i++)
a[i]=a[i+j];
程序的这一部分是想读入一个超长正整数,考虑到存在000000的情况,所以在while()里加了一个&&a[j+1]!='\0',但是改了以后变成一个死循环了,为什么?
求解释..百思不得其解咧..

测试下面的代码

#include<stdio.h>

#include<string.h>

int main()

{

    char a[81];

    int i=0,j=0;

    while ((a[i]=getchar())!='\n')

        i++;

    a[i]='\0';

printf("%d %d \n %s\n",i,j,a);

    while (a[j]=='0'&&a[j+1]!='\0')

        j++;

printf("%d %d \n %s\n",i,j,a);

    if (j!=0)

        for (i=0;i<=(strlen(a)-j);i++)/*不建议这样写i<=(strlen(a)-j),

  因为这是个动态的字符串,最好先求出字符串的长度在放进去,

  二来更有效率,不用每次都计算字符串的长度*/

            a[i]=a[i+j];

printf("%d %d \n %s",i,j,a);

fflush(stdin);//清除缓冲

getchar();

return 0;

}


运行结果


输入为第一行的数据

运行没异常!不知道你用的编译器是什么?绿色版精简版?我使用的是vs2010

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-09
可以设置循环计数变量
为了防止程序出现死循环,最好的办法当然是自习检查程序,保证逻辑正确就好了。如果不放心可以设置循环计数变量,嵌入循环,当溢出上限时停止程序并报错即可。
第2个回答  2012-12-19
a[j] == '0' && a[j+1]!='\0' 当&&前面的表达式为假的话就不会判断后面的表达式,所以当前面的表达式永远为假时就一直循环下去。
第3个回答  2012-12-19
i<=(strlen(a)-j) 超出范围了,不是死循环,是崩溃了。 改成i<(strlen(a)-j)。
第4个回答  2015-10-29
  对于死循环程序,只能强制退出。

  1、控制台程序中的死循环程序,一般按CTRL+C直接中断程序即可。比如下面的死循环控制台程序。
  int main()
{
while (1) ; ;
return 0;
}
  按CTRL+C即可中断程序。在控制台下会显示为^C。

  2、图形界面中的死循环程序,可以使用进程管理工具来强制结束,比如windows上的任务管理器。当然控制台死循环程序,也可以使用此种方法结束。以win7为例,在任务栏上右键,在弹出菜单中选择“任务管理器”。

  在任务管理器中找到要结束的进程,右键选择“结束进程”即可。

C语言中的死循环是什么意思
在编程中,一个靠自身控制无法终止的程序称为"死循环"。不存在一种算法,对任何一个程序及相应的输入数据,都可以判断是否会出现死循环。因此,任何编译系统都不做死循环检查。然而,在编程中死循环并不是一个需要避免的问题,相反,在实际应用中,经常需要用到死循环。例如,我们使用的电脑操作系统下的...

死循是什么意思
在编程中,一个靠自身控制无法终止的程序称为“死循环”。例如在C语言程序中,语句“while(1)printf("*");”就是一个死循环,运行它将无休止地打印*号。不存在一种算法,对任何一个程序及相应的输入数据,都可以判断是否会出现死循环。因此,任何编译系统都不做死循环检查。在设计程序时,若遇到死...

我的c语言程序没有报错为什么会执行不了?
1. 程序陷入死循环:程序在某个地方出现了死循环,使得程序无法继续向下执行。如果程序似乎无法结束,可以检查程序是否存在死循环。2. 内存泄露:程序在使用动态内存分配函数(如malloc、calloc)等开辟内存空间时,没有及时释放所分配的内存空间,导致内存泄露。内存泄露会导致系统内存资源的浪费,最终导致程序...

C语言到#结束,但为什么我的程序会陷入死循环啊?
因为是在while前输入的数据,循环过程中这个数据一直存在。把scanf("%f%c%f",&a,&b,&c); while(b!='#'){改成while(scanf("%f %c%f",&a,&b,&c)==3 && b!='#'){。把所有的continue;删除。

c语言,为何这是死循环?
while(1)表示无条件执行循环(因为1表示真),而它的循环体是后面跟着的那个语句:也就是printf("%d",k-=3);所以程序会一直运行printf("%d",k-=3); 永远出不来。这条语句就相当于 while(1){ printf("%d",k-=3);} 加上大括号里面可以加多个语句作为循环体,如果没加大括号就是while后面的...

C语言里死循环怎么结束
1、C语言中,强制终止死循环可以用CTRL+BREAK组合键或者CTRL+C组合键。2、命令解释:CTRL+BREAK 设置或清除 DOS 系统的扩展。CTRL+C 检测这个命令是为了与 DOS 系统的兼容而保留的,在 Windows里不起作用。如果命令扩展被启用,并且操作平台是Windows,BREAK 命令会在被调试程序调试时输入一个硬代码中...

C语言:为什么下面的程序段是死循环?手机党,原谅我没有排版
注意while里面的表达式:1<=x<=2,并不是判断x在区间[1,2]内,而是:首先计算1<=x的值,结果是真或者假,就是1或者0。然后判断这个值与2的大小关系,显然不论是1还是0,都小于等于2,所以永远是真的。从而使死循环。

c语言中一般运行后停止工作有哪些情况
只要编译通过,一般情况下C语言程序停止工作,多为输入输出格式不对,或计算陷入死循环。1、输入输出格式不对。最常见的就是&符号,该有的没有,不该有的打了&符号。例如:int n;scanf("%d",n);n前少打了&符号。编译能通过,执行时就会出现停止工作的情况。2、个别计算陷入死循环的情况,例如:i...

C语言死循环
1、if(k==0) continue;应该break而不是continue 2、while后边少了一个{ i++后也少了一个} 使得循环内i得不到变化,所以死循环。3、不应该那么打印。正确代码如下:include<stdio.h> void main(){ int i,j,k;i=1;while(i<=100){ for(j=2;j...

C语言死循环
for(i=1;;i++){ if(++i%2==0) continue;\/\/因为每次循环都执行这个语句,不执行下面语句,进而执行下一次循环 if(++i%3==0) break; \/\/这一句永远也不执行,所以跳不出循环,出现死循环了。}

相似回答