为什么这个程序出现死循环?

beyondada 2004-11-15 01:26:48
#include<iostream.h>

#include<stdio.h>

void main()
{
char* ch;
int i=0;
ch=new char[100];
gets(ch);
while(ch!='\0'){
cout<<ch[i];
i++;
}

cout<<ch;
}
如果输入qq ee等就会出现死循环,为什么??请问怎么改??
谢谢!!
...全文
289 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
greenteanet 2004-11-16
  • 打赏
  • 举报
回复
呵呵,楼上的还真仔细啊....
tiaoci 2004-11-16
  • 打赏
  • 举报
回复
好搞笑啊,竟然有这么多人又自己写了编程序,

这么简单的问题,ch没有初始化么
hiller888 2004-11-16
  • 打赏
  • 举报
回复
void main()
{
char* ch;
int i=0;
ch=new char[100];
memset(ch,'\0',100);
gets(ch);
while((ch[i]!='\0'&&i<100)
{
cout<<ch[i];
i++;
}

cout<<ch;
}

woshi_zjf 2004-11-16
  • 打赏
  • 举报
回复
判断语句有问题 ch指向的是数组的首地址 所以ch的数据是一直不变的自然是死循环
zjraycj 2004-11-16
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
void main()
{
char* ch;
int i=0;
ch=new char[100];
memset(ch,'\0',100);
gets(ch);
while((*(ch+i))!='\0'&&i<100)//完整一点吧
{
cout<<ch[i];
i++;
}

cout<<ch;
}
Mr.鄧〞 2004-11-16
  • 打赏
  • 举报
回复
void main()
{
char* ch;
int i=0;
ch=new char[100];
memset(ch,'\0',100);
gets(ch);
while((*(ch+i))!='\0')
{
cout<<ch[i];
i++;
}

cout<<ch;
}
我也确认过了。OK
questionboy 2004-11-15
  • 打赏
  • 举报
回复
所有的答案中好像還缺少一個數組越界的檢驗,加上這個
while((*(ch+i))!='\0' && i<100 )
{}
CgPanda_ 2004-11-15
  • 打赏
  • 举报
回复
小程序长了大见识
顶]
houdy 2004-11-15
  • 打赏
  • 举报
回复
gets()其实是line-buffer的,所以当遇到回车的时候,buffer中的数据都flush了,同时在字符串结尾处添加一个'\0'表示结束,整个过程都是标准I/O帮我们完成的。
如果真想表示输入完毕,在Unix下可以用Ctrl+D,在Windows下用Ctrl+Z表示文件结束。
判断是否结束时,需要包含#include <stdlib.h>,判断是否为EOF,如果遇到EOF,表示到了文件结束。
krosjean 2004-11-15
  • 打赏
  • 举报
回复
你这个while用得毫无必要 ,gets(fgets)本身遇到回车就会返回

char *ch = new char[100];
fgets(ch, 100, stdin);
std::cout << ch;
wyyhzcflying 2004-11-15
  • 打赏
  • 举报
回复
路过!
rferen2003 2004-11-15
  • 打赏
  • 举报
回复
char* ch;
int i=0;
ch=new char[100];
gets(ch);
while(*(ch+i)!='\0'){
cout<<ch[i];
i++;
}

cout<<ch;


这样通过了,我测试过啦
不过为啥要重复输出ch
zhangfjj 2004-11-15
  • 打赏
  • 举报
回复
楼上的,知道了,请见上面的说明,对不起,我没有看清楚!
Willin 2004-11-15
  • 打赏
  • 举报
回复
TO zhangfjj(小张(生命不息,灌水不止。)),虽然他显示在屏幕上的东西变了,但是他的循环控制条件没有变
zhangfjj 2004-11-15
  • 打赏
  • 举报
回复
gets(ch);是可以的,没有必要用memset,还要包含其他头文件,麻烦,楼主的问题出在
while(...)这里
hbsandy 2004-11-15
  • 打赏
  • 举报
回复
void main()
{
char* ch;
int i=0;
ch=new char[100];
memset(ch,'\0',100);
gets(ch);
while((*(ch+i))!='\0')
{
cout<<ch[i];
i++;
}

cout<<ch;
}
zhangfjj 2004-11-15
  • 打赏
  • 举报
回复
看来要补课的是我,为了图快,没有看清楚题,:(
我还以为是输入呢。
在这里应该是
while(ch[i]!='\0')
beyondada 2004-11-15
  • 打赏
  • 举报
回复

谢谢~~
刚才看错了
wshcdr 2004-11-15
  • 打赏
  • 举报
回复
memset(ch, 100, 0);

//////////////////////

不好意思,这里用错了

:)
wshcdr 2004-11-15
  • 打赏
  • 举报
回复
问题在这里

while(ch!='\0')

你的ch永远指向第一个字符,当然会死循环啦!
加载更多回复(6)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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