关于数组取值的错误

johnlove9527 2010-12-25 09:45:22
我定义了一个全局数组,在读取txt文件时赋值,然后我想取值处理的时候发现赋值没有了,都是0。
这个是怎么回事?
而且是第一个值取出来是对的,后面的全都变成了初始化的0。求帮助。
Cpp里定义了
typedef struct node
{
double x;
double y;
double sq;
}node;
node *bigdata;

在菜单栏响应函数中
int BHang=3828;
bigdata=new node[BHang];
for(int i=0;i<BHang;i++)
{
bigdata[i].sq=0;
bigdata[i].x=0;
bigdata[i].y=0;
}
CString txtFileName;
CFileDialog bigdlg(TRUE,"系数",".txt",OFN_HIDEREADONLY
| OFN_OVERWRITEPROMPT,"txt(*.txt)|*.txt||");
if(bigdlg.DoModal()==IDOK)
{
txtFileName=bigdlg.GetPathName();
ifstream fouttxt;
fouttxt.open(txtFileName);

while(!fouttxt)
{
cout<<"数据打开失败!"<<endl;
return ;
}

char x;
CString bss;
int bcount=0;
double bvalue=0.0;
int brownumber=0;

while(!fouttxt.eof())
{
fouttxt.read(&x,1);
if (x==' ' || (int)x==9 || (int)x==10)
{
if (bss!="")
{
bvalue=atof(bss);//转换成double
bcount=bcount+1;//读入double数值的相母
int ny=0;

if(bcount%3==0)
{
bigdata[ny].sq=bvalue;
brownumber++;
ny=brownumber;
}
if(bcount%3==2)
{
bigdata[ny].y=bvalue;
}
if(bcount%3==1)
{
bigdata[ny].x=bvalue;
}
}
bss="";
}
else
{
if (x!='"' && x!=' ')
bss=bss+x;
}
}
fouttxt.close();
AfxMessageBox("数据正在处理,请等待……");

CString TxtFileName;
CFileDialog fileBDlg(FALSE);
fileBDlg.m_ofn.lpstrTitle = "另存为txt格式";
fileBDlg.m_ofn.lpstrFilter = "txt Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0";
fileBDlg.m_ofn.lpstrDefExt = "txt";
if(IDOK == fileBDlg.DoModal())
{
ofstream outbfile;
TxtFileName = fileBDlg.GetFileName();
outbfile.open(TxtFileName);
for(int ii=0;ii<BHang;ii++)
{
double oldvalue=0.0;
double newvalue=0.0;
oldvalue = bigdata[ii].sq+0.5;
newvalue = ceil(oldvalue);
outbfile<<bigdata[ii].x<<"\x20"<<bigdata[ii].y<<"\x20"<<newvalue<<"\n";
}
outbfile.close();
AfxMessageBox("存储完毕!");
}
}
delete []bigdata;


请问是怎么回事啊。谢谢了。
...全文
63 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
johnlove9527 2010-12-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 nklwg 的回复:]
你的while函数只读取了第一个数值吧,
好像没有递增部分

voidCReadTxtDlg::OnBUTTONRead()

{

//CStringStrFileName="data.txt";

//CFileMyFile;

//if(!MyFile.Open(StrFileName,CFile::modeRead,NULL))

//{

//Message……
[/Quote]


额,太悲剧了,定义ny的时候放错地方了,我调试的时候没注意,太粗心了,谢谢了额。
nklwg 2010-12-25
  • 打赏
  • 举报
回复
你的while函数只读取了第一个数值吧,
好像没有递增部分

voidCReadTxtDlg::OnBUTTONRead()

{

//CStringStrFileName="data.txt";

//CFileMyFile;

//if(!MyFile.Open(StrFileName,CFile::modeRead,NULL))

//{

//MessageBox("打开文件操纵失败","信息提示",MB_OK);

//}

//

//else

//{

//charContent[51];

//MyFile.Read(Content,51);

//MessageBox(Content,"信息提示",MB_OK);//代开文件,取出内容,在对话框里显示

//

//CDC*pDC=GetDC();

//pDC->TextOut(10,10,Content);//代开文件,取出内容,在界面上显示

//}

//一个例子为:

//#include<conio.h>

//#include<stdio.h>

//

//voidmain()

//{

//intx,y;

//FILE*fp=fopen("ipc.txt","rt");

//

//while(fscanf(fp,"327x%dy%ds0\n",&x,&y)==2)

//printf("%d%d\n",x,y);

//fclose(fp);

//getch();

//}

intx1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15;

inta[253][15]={0};

FILE*fp=fopen("data.txt","rt");

//while(fscanf(fp,"%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d\n",

//&x1,&x2,&x3,&x4,&x5,&x6,&x7,&x8,&x9,&x10,&x11,&x12,&x13,&x14,&x15)==2)

for(inti=0;i<253;i++)

{

fscanf(fp,"%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d\n",

&x1,&x2,&x3,&x4,&x5,&x6,&x7,&x8,&x9,&x10,&x11,&x12,&x13,&x14,&x15);

a[i][0]=x1;

a[i][1]=x2;

a[i][2]=x3;

a[i][3]=x4;

a[i][4]=x5;

a[i][5]=x6;

a[i][6]=x7;

a[i][7]=x8;

a[i][8]=x9;

a[i][9]=x10;

a[i][10]=x11;

a[i][11]=x12;

a[i][12]=x13;

a[i][13]=x14;

a[i][14]=x15;

}

//CStringstr;

//str.Format("%d",a[0][0]);

//MessageBox(str,"信息提示",MB_OK);

fclose(fp);

intnum[253]={0};

for(intj=0;j<253;j++)

{

for(intk=0;k<253;k++)

{

if(a[j][0]!=a[k][0]&&a[j][1]!=a[k][1]&&a[j][2]!=a[k][2]&&

a[j][3]!=a[k][3]&&a[j][4]!=a[k][4]&&a[j][5]!=a[k][5]&&

a[j][6]!=a[k][6]&&a[j][7]!=a[k][7]&&a[j][8]!=a[k][8]&&

a[j][9]!=a[k][9]&&a[j][10]!=a[k][10]&&a[j][11]!=a[k][11]&&

a[j][12]!=a[k][12]&&a[j][13]!=a[k][13]&&a[j][14]!=a[k][14])

{

num[j]++;

}

}

}

CStdioFilem_file;

CStringstr,m_myprint,out;

str="out.txt";

m_myprint="";

out="";

for(intm=0;m<253;m++)

{

m_myprint.Format("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d\n",

a[m][0],a[m][1],a[m][2],a[m][3],a[m][4],a[m][5],a[m][6],a[m][7],a[m][8],a[m][9],

a[m][10],a[m][11],a[m][12],a[m][13],a[m][14],num[m]);

out+=m_myprint;

}

if(!m_file.Open(str,CFile::modeCreate|CFile::modeReadWrite))//文件创建并写进字符串,CFile::modeCreate删除,效果就不一样了

MessageBox(_T("文件打开失败!"),_T("错误"),MB_OK|MB_ICONINFORMATION);

m_file.WriteString(out);

m_file.Close();

}

//voidCQmyDlg::OnButton3()

//{

//CStdioFilem_file;

//

//CStringstr;

//str="QQ记录"+m_mydata+"-"+m_mytime+".txt";

//

//if(!m_file.Open(str,CFile::modeCreate|CFile::modeReadWrite))//文件创建并写进字符串,CFile::modeCreate删除,效果就不一样了

//MessageBox(_T("文件打开失败!"),_T("错误"),MB_OK|MB_ICONINFORMATION);

//m_file.WriteString(m_myprint);

//m_file.Close();

//

//MessageBox("保存成功!\r\n文件保存到软件目录下",MB_OK);

//

//}

johnlove9527 2010-12-25
  • 打赏
  • 举报
回复
来个人帮忙啊。谢谢了啊。我以前也做过类似的,但是没有问题,这个怎么回事呢。。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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