c++程序陷入循环
C++ Program stuck in a loop
所以这个程序应该接受一个字符串并将其转换为反向波兰符号,然后为它生成汇编代码。
例如。如果我输入"x = y",程序将返回
"RPN: xy="
"代码:我很高兴。
然而,程序返回乱码,并继续这样做,直到内存耗尽。
这是输入函数
void
getstring()
{
if(datafile) {
file.getline(str,241);
}else{
cout << "Enter a string, please nn";
cin.getline( str, 241);
}
nstring++;
}
这些是与它一起工作的函数
void
internalize()
{
int i, j;
static char inter[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 6, 4, 0, 5, 0, 7,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
0,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,
23,24,25,26,27,28,29,30,31,32,33, 0, 0, 0, 0, 0,
0,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,
49,50,51,52,53,54,55,56,57,58,59, 0, 0, 0, 0, 0};
char ch, code, k, *p, *q;
cout << "internal form: nn";
k=0;
q=inform;
for(p=str;*p;p++){
*q++ = code = inter[(int)*p];
if(k+code == 0){
k = p-str+1;
ch = *p;
}
}
*q = 0;
for(i=j=0, p = inform;p++,j++;j<len){
cout << setw(3) << (int)*p;
if(++i == 16){
cout << 'n';
i = 0;
}
}
if (i !=0){
cout <<'n';
}
if((err = (0<k))!=0){
cout << 'n**' << (int)k << "-th nonblank char <" <<ch<<"> is illegal. **n";
}
}
void
makerpn()
{
static char pr[]={0,0,1,2,3,3,4,4};
char n, *p, *r, s, *t;
cout << "nRPN:nn";
t = stak - 1;
r = rpn;
for (p = inform;p++ ; *p){
if(7 < (s = *p)){
*r++ = s;
//a
}else if(s == 1){
*++t = s;
} else{
while(1){
if(t<stak){
*++t = s;
break;
} else if(pr[s] <= pr[n = *t--]){
*r++ = n;
} else if(3 < n+s){
*++t = n;
*++t = s;
}
break;
}
}
while(stak <= t){
*r++ = *t--;
}
*r = ' ';
for(r=rpn;*r;r++){
cout << ext[(int)*r];
}
cout << "nn";
}}
void
gencode()
{
void emit(char, char);
char a,j,lop,n1,n2,*p,*t;
cout << "Generated symbolic code nn";
j = len = lop = 0;
t = p = rpn;
while(3 <(a = *++p)){
if(7 <a){
*++t = a;
if((++lop == 2) && (0<len)){
n2=*t--;
n1=*t--;
*++t=j+60;
*++t=n1;
*++t=n2;
emit(2,(j++)+60);
}
}else {
if(lop == 1){
emit(a,*t--);
}else{
if( 1 < lop){
n2 = *t--;
n1 = *t--;
emit(1,n1);
emit(a,n2);
}else {
if((a==4) || (a==6)){
n1 = *t--;
emit(a,n1);
}else {
n1=*t--;
emit(2,j+60);
emit(1,n1);
emit(a,j+60);
if( 59 < n1){
--j;}}}}}}
lop = 0;
}
我猜循环有问题,但我不确定是什么。我已经调整了一段时间,我所能做的就是让它重复Hp?
for (p = inform;p++ ; *p)
将继续直到p
的下一个值是nullptr
,并且每轮将取消对p
的引用并丢弃结果-您可能是指另一种方式。
类似的情况是:for(i=j=0, p = inform;p++,j++;j<len)
将继续运行,直到j++
变成0
,并丢弃每次迭代比较j<len
的结果。
相关文章:
- C++程序在循环后给出奇怪的int值
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 为什么我的程序在for循环中k=0时返回垃圾值
- 密码登录程序将永远循环并显示不正确的结果
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 而循环:简单的除法程序输出零,不明白为什么
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- 虽然循环在使用回车键时不退出程序
- 如何调试我的 while 循环C++程序?
- if/else 循环:C++程序:不会显示最终提示/最终循环
- 简单的C 嵌套以用于循环程序,以打印带有星星错误的正方形
- 带有空间的C 星号循环程序
- 循环程序的行为是不可预测的
- 如何解决嵌套循环程序的问题
- 对我的做边循环程序感到困惑
- gcc和clang都无法编译循环程序
- 需要帮助do-while循环程序?(c++)
- 一个用c++编写的简单游戏循环程序
- 如何循环程序,使其继续执行