新手请教 对话框为什么输不出结果

long077 2009-06-11 09:19:27
下面是我的程序 前面的这个调用函数是用来读取txt里的数据的 下面是按钮里的计算程序 程序本身已经在win32运行成功了 现在MFC也编译成功了 但是按钮BUTTON_SOME按下去后 编辑框EDIT_OUT却一点反应也没有 输不出结果 我在想是不是读取函数错了 听说直接用一个cfile就可以了 但是对MFC很陌生 还是不懂 希望好心人帮忙一下


void ReadText(char filename[],double data[][ROW]) //读取数据的函数
{
int i,j;
char buf_num[30]; //存储每个数字的字符
char *p;
char c;
ifstream fin;
fin.open(filename,ios::binary|ios::in);
for(i=0;i<LINE;i++)
{
for(j=0;j<ROW;j++)
{
p=buf_num;
while(1)
{
//找到当前要取的数字开头或行末尾
fin.read(&c,1);
if(c=='-' || c=='.' || (c>='0' && c<='9'))
break;
}
//将当前数字的字符串复制到buf_num中
while(c=='-' || c=='.' || (c>='0' && c<='9'))
{
*p=c;
p++;
fin.read(&c,1);
}
*p='\0';
data[i][j]=atof(buf_num);
cout<<setprecision(15)<<'\t';
p=buf_num;
}
cout<<endl;
}
fin.close();
}


void CJianceDlg::OnButtonSome() //按钮事件
{
int n,i,m,c,k,q,o,v,u;
complex S2,S1,S,S0,S10,X[64],X1[64],xn,X0,a,b,z,w;
double f,sto;
complex TT[64][64],MT[64][64],MS[64][64];

/*------------调用读取函数-------------*/
char filename[20];
double x[64];
double xnn;
double data[LINE][ROW];
UpdateData(0);
ReadText("data3.txt",data);

for(o=0;o<13;o++)
{
for(u=0;u<64;u++)
{
x[u]=data[o][u];
}
double x1[64]={378.719486461068,376.8193347340691,371.15486129825143,361.78330276284385,348.79848218940725,332.32994642114653,341.01136947787404,355.7686494784199,366.9598355166345,374.47763103667546,378.2501836350581,378.24208318585227,374.4549258916443,366.92745296939813,355.73527811870724,340.9902178976729,332.3383330592581,348.8277162663549,361.817526496756,371.18324245791416,376.83513871006403,378.7194863082151,376.8193347038166,371.15486129691215,361.78330276714735,348.7984821938859,332.32994642474927,341.0113694806064,355.7686494804675,366.9598355181114,374.4776310377464,378.25018363583627,378.242083186418,374.4549258920556,366.92745296969724,355.735278118925,340.9902178978311,332.3383330593718,348.8277162664352,361.8175264968433,371.1832424579791,376.83513871011166,378.7194863082499,376.81933470384195,371.1548612969307,361.7833027671609,348.7984821938958,332.3299464247567,341.0113694808183,355.7686494805064,366.9598355181254,374.477631037753,378.25018363584024,378.2420831864207,374.4549258920577,366.9274529696991,355.73527811892643,340.9902178978326,332.3383330593719,348.8277162665365,361.81752649686155,371.1832424579887,376.8351387101175,378.7194863082538};

for(i=0;i<64;i++) //第一个循环 i
{
for(n=0;n<64;n++) //第二个循环 n
{
for(q=0;q<n+1;q++)
{
X[0]=0;X1[0]=0;
for(k=0;k<64;k++)
{
a.re=0;
a.im=0.098174*q*k; //计算X[q]
b=a;
b=exp(a);
X[q]=X[q]+x[k]*b;
X1[q]=X1[q]+x1[k]*b;
}
X[q]=1.0/64*X[q];
X1[q]=1.0/64*X1[q];
}
if(n==0)
{
complex s,s1;
s=0;s1=0;
for(int t=0;t<64;t++)
{
s=s+X[t];
s1=s1+X1[t];
}
S=s/64;
S1=s1/64;
}
else
{
S=0;S1=0;
for(m=0;m<64;m++) //第三个循环 m
{
c=(m+n)%64;
f=-19.73920879*m*m/(n*n);
w=exp(f);
z.re=0;
z.im=0.09817477*m*i;
S2=exp(z);
S=S+X[q]*w*S2;
S1=S1+X1[q]*w*S2;
}
}
MS[i][n]=S;
MT[i][n]=S1;
}
}
complex st,stt,sts,stm;
stt=0;
sts=0;
stm=0;
for(int e=0;e<64;e++)
{
for(int r=0;r<64;r++)
{
sts+=MT[e][r]*MS[e][r];
stt+=MT[e][r]*MT[e][r];
stm+=MS[e][r]*MS[e][r];
}
}
complex st1,st3,st4,st5;
double st2,st0,st6;
st=sts/sqrt(stt*stm);
st1=sqrt(st.re*st.re+st.im*st.im);
st2=st1.re;
if(sto<st2)
{
sto=st2;
v=o;
}

CString str=st2;//计算结果
GetDlgItem(IDC_EDIT_OUT)->SetWindowText(str);
UpdateData(0);
}
getch();

}


另外 如果x1[64]改成要从编辑框EDIT2中输入的话前面要不要做很大的改动
...全文
109 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lonelyhacker 2009-06-12
  • 打赏
  • 举报
回复
语法是没错。但是看起来很那个。
CString str ="断路";
switch(v)
{
case 1:
case 2:
GetDlgItem(IDC_EDIT_T1)->SetWindowText(str);
break;
case 3:
GetDlgItem(IDC_EDIT_T2)->SetWindowText(str);
break;
......
default:
break;


}


long077 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zlmzhuanjia 的回复:]
你这个不需要加break,但是 你这样写太乱了 用switch语句比较好的吧?
[/Quote]
这样语法上应该没错吧
long077 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zlmzhuanjia 的回复:]
你这个不需要加break,但是 你这样写太乱了 用switch语句比较好的吧?
[/Quote]
太久没用那语句 结果写下来都错了 就改成用if了
zlmzhuanjia 2009-06-12
  • 打赏
  • 举报
回复
你这个不需要加break,但是 你这样写太乱了 用switch语句比较好的吧?
long077 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 Conry 的回复:]
你的str2是double
CString str;
str.Format("%f",str2);//计算结果
GetDlgItem(IDC_EDIT_OUT)->SetWindowText(str);
用SetWindowText就不用UpdateData了
UpdateData(0);
[/Quote]
谢谢你哈 改了之后确实可以运行了 但是运行时间很长 后面的就出不来了 只能出来一个 而结果应该是13个循环显示出来的
另外我在后面接了一段判断输出文本到其他编辑框的 这样写不知道可不可以 现在还是没出结果
if(v==0)
{
}
else if(v==1)
{
CString str="断路";
GetDlgItem(IDC_EDIT_T1)->SetWindowText(str);

}
else if(v==2)
{
CString str="断路";
GetDlgItem(IDC_EDIT_T1)->SetWindowText(str);
}
else if(v==3)
{
CString str="断路";
GetDlgItem(IDC_EDIT_T2)->SetWindowText(str);
}
else if(v==3)
{
CString str="断路";
GetDlgItem(IDC_EDIT_T3)->SetWindowText(str);
}
else if(v==4)
{
CString str="断路";
GetDlgItem(IDC_EDIT_T4)->SetWindowText(str);
}
else if(v==5)
{
CString str="断路";
GetDlgItem(IDC_EDIT_T5)->SetWindowText(str);
}
else if(v==6)
{
CString str="断路";
GetDlgItem(IDC_EDIT_T6)->SetWindowText(str);
}
else if(v==7)
{
CString str="短路";
GetDlgItem(IDC_EDIT_T1)->SetWindowText(str);
}
else if(v==8)
{
CString str="短路";
GetDlgItem(IDC_EDIT_T2)->SetWindowText(str);
}
else if(v==9)
{
CString str="短路";
GetDlgItem(IDC_EDIT_T3)->SetWindowText(str);
}
else if(v==10)
{
CString str="短路";
GetDlgItem(IDC_EDIT_T4)->SetWindowText(str);
}
else if(v==11)
{
CString str="短路";
GetDlgItem(IDC_EDIT_T5)->SetWindowText(str);
}
else
{
CString str="短路";
GetDlgItem(IDC_EDIT_T6)->SetWindowText(str);
}
需不需要在里面加个break;什么的啊 我之前加进去有错就又改掉了 现在这部分也没有出结果
Conry 2009-06-11
  • 打赏
  • 举报
回复
你的str2是double
CString str;
str.Format("%f",str2);//计算结果
GetDlgItem(IDC_EDIT_OUT)->SetWindowText(str);
用SetWindowText就不用UpdateData了
UpdateData(0);
long077 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bragi523 的回复:]
代码太乱了
没办法看啊
你在onbutton里面设个断点
然后单步看一下吧
看看问题出在哪
[/Quote]

在onbutton里面设个断点 这个没试过 能不能说具体一点 怎么弄 代码本身是没错的
bragi523 2009-06-11
  • 打赏
  • 举报
回复
代码太乱了
没办法看啊
你在onbutton里面设个断点
然后单步看一下吧
看看问题出在哪
long077 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiao0915 的回复:]
设置断点,单步调试
[/Quote]
一直在这边循环着 看不懂这是什么代码
{
// call shared/exported WinMain
return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
}

还弹出界面 然后是FoundSouce对话框 就这样一直循环着

xiao0915 2009-06-11
  • 打赏
  • 举报
回复
设置断点,单步调试
long077 2009-06-11
  • 打赏
  • 举报
回复
到网上查了一下 好像这不是错误

这样的话问题应该是在读取txt的函数里面吧 是不是一定要用cfile才行啊 没人看一下吗
long077 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oyljerry 的回复:]
设置断点,单步调试一下,看你的代码都跑到哪些地方
[/Quote]
刚运行一下 发现一直在这里
LPTSTR lpCmdLine, int nCmdShow)
{
// call shared/exported WinMain
return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
}



还出现一大堆调试错误信息 看得我都晕死了 这应该是同一个错误引起的吧 是不是读取文件函数那边出错了呢 一定要用cfile才行吗
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MFC42D.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MSVCRTD.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MFCO42D.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MSVCIRTD.DLL', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\imm32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\advapi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\rpcrt4.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\secur32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\lpk.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\usp10.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\mfc42loc.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\comctl32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\uxtheme.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MSCTF.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\version.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MSCTFIME.IME', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ole32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\shlwapi.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\mslbui.dll', no matching symbolic information found.
The thread 0xAE8 has exited with code 2 (0x2).
The program 'D:\study\毕业设计\work\jiance\Debug\jiance.exe' has exited with code 2 (0x2).
oyljerry 2009-06-11
  • 打赏
  • 举报
回复
设置断点,单步调试一下,看你的代码都跑到哪些地方

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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