| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 989 人关注过本帖
标题:输入数据一回车程序就死,这个程序我调了3个小时了.
只看楼主 加入收藏
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
结帖率:88.89%
收藏
 问题点数:0 回复次数:12 
输入数据一回车程序就死,这个程序我调了3个小时了.

/**************************************************************
程序功能:从终端上输入一段正文,将每个出现的单词存入一数组,
要求重复出现的单词能记下该单词的出现次数。
***************************************************************
目前能通过编译,但是不能正确运行,输入数据一回车就死!
**************************************************************/
#include "iostream.h"
#include "string.h"
struct pair
{
char *name;
int val;
};
const int large=600;
static pair vec[large];
pair * find(char *p)
{
for(int i=0; vec[i].name;i++)
{
if (strcmp(p,vec[i].name)==0) return &vec[i];
if (i==large) return &vec[large-1];
return &vec[i];
}
}

int & value(char *p)
{
pair *res=find(p);
if(res->name==0)
{
res->name=new char [strlen(p)+1];
strcpy(res->name,p);
res->val=0;
}
return res->val;
}
const int max=255;
main()
{
char buf[max];
while (cin >> buf) {value(buf)++;}
for (int i=0;vec[i].name;i++)
{
cout<<vec[i].name<<":"<<vec[i].val<<"";
}
}

搜索更多相关主题的帖子: 数据 回车 输入 
2007-06-21 23:02
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
收藏
得分:0 

谁来帮帮忙啊?

2007-06-21 23:06
百年不亮
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:789
专家分:0
注 册:2006-4-14
收藏
得分:0 
你调了3个小时? 有没有单步执行加变量监控? 这种短程序DEBUG很快就可以找到问题的

你看下流程,第一次调用pair * find(char *p);里头有句for(int i=0; vec[i].name;i++),vec[]你有初始化吗?


最后说下你的main函数,你不写main函数返回值,编译器默认返回int,你main函数中也没有写return,严格的编译器会抱错.这不是什么好习惯.

2007-06-21 23:26
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
收藏
得分:0 

没有啊,我是新手,

2007-06-21 23:32
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
收藏
得分:0 
哦,谢谢啊

2007-06-21 23:33
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 

因为是C++的 所以人生地不熟 写的可能有点兰
#include<iostream.h>
#include<string.h>
main()
{
char str[20];
int i,j=0,temp=1;
while(cin>>str){
for(i=0;str[i];i++)
{
if(str[i]=='*')
cout<<' ';
temp=1;
for(j=i+1;str[i]!='*'&&str[j];j++)
if(str[j]!='*'&&str[i]==str[j])
{
temp++;
str[j]='*';
}
if(str[i]!='*')
cout<<temp;
}
cout<<' ';
}

}


羊肉串 葡萄干 哈密瓜!!
2007-06-22 02:13
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
以下是引用百年不亮在2007-6-21 23:26:18的发言:
你调了3个小时? 有没有单步执行加变量监控? 这种短程序DEBUG很快就可以找到问题的

你看下流程,第一次调用pair * find(char *p);里头有句for(int i=0; vec[i].name;i++),vec[]你有初始化吗?


最后说下你的main函数,你不写main函数返回值,编译器默认返回int,你main函数中也没有写return,严格的编译器会抱错.这不是什么好习惯.

他是初学 这个程序是他在书上抄下来的 他的数是4年前的书 而且是个盗版的书好像


羊肉串 葡萄干 哈密瓜!!
2007-06-22 02:15
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
收藏
得分:0 

他是初学 这个程序是他在书上抄下来的 他的数是4年前的书 而且是个盗版的书好像
我想也是的,只是我怎么想到教育局的自考办公室的书怎么会是盗版呢?可是书上的字不清晰,而且到处是错,我都不得不信了,哎!

百年不亮,谢谢你所提醒.
mp3aaa,谢谢你的程序啊.



现在我把数组初始化了,不死了,但是好象进入死循环了!再请你们帮忙看看啊.
#include "iostream.h"
#include "string.h"
struct pair
{
char *name;
int val;
};
const int large=6;
static pair vec[large]={{"",0},{"",0},{"",0},{"",0}};
pair * find(char *p)
{
for(int i=0; vec[i].name;i++)
{
if (strcmp(p,vec[i].name)==0) return &vec[i];
if (i==large) return &vec[large-1];
return &vec[i];
}
}

int & value(char *p)
{
pair *res=find(p);
if(res->name==0)
{
res->name=new char [strlen(p)+1];
strcpy(res->name,p);
res->val=0;
}
return res->val;
}
const int max=255;
main()
{
char buf[max];
while (cin >> buf) value(buf)++; //这里怎么不退出循环啊?怎么才能退出循环啊?
for (int i=0;vec[i].name;i++)
{
cout<<vec[i].name<<":"<<vec[i].val<<"";
}
}

[此贴子已经被作者于2007-6-22 8:39:47编辑过]

2007-06-22 08:29
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
ctrl + z

Fight  to win  or  die...
2007-06-22 09:24
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
收藏
得分:0 
谢谢了啊,问题解决了啊,能退出了,可是没有输出vec[i].name的值啊.再帮我看看啊?
2007-06-22 11:37
快速回复:输入数据一回车程序就死,这个程序我调了3个小时了.
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017484 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved