【问题标题】:Program going into an infinite loop程序进入无限循环
【发布时间】:2015-12-29 18:18:58
【问题描述】:

这是我在这里提出的第一个问题,所以我很高兴能获得一些关于我用来指代我的问题的风格的支持 :)。这是完成的程序,它的主要目的是将给定的单词分成两半并创建替换原始单词的单词。替换的单词是从其起源构建的,方法是将它们分成两半,并从单词的第一个字母开始的前半部分取偶数。完整代码如下:

#include <iostream>
#include <string>
#include <cstdio>
#include <math.h>

using namespace std;

void obcinaczSlow(int);

int main(){
    int ilosc;
    cout << "Prosze o podanie ilosci prob: ";
    cin>>ilosc;
    cout << endl;
    obcinaczSlow(ilosc);
    cin.ignore();
    cin.get();
    return 0;
}

void obcinaczSlow(int ilosc_prob){

    int i=0,j=0,dlugosc_slowa=0,dlugosc_polowy=0;
    string *tablica_slow,budowane_slowo,aktualne_slowo,dodane;
    tablica_slow = new string [ilosc_prob];

    cout << "Prosze o podanie " << ilosc_prob << " slow" << endl;
    cin.sync();
    for(i=0;i<ilosc_prob;i++){
        cout << "Prosze o podanie slowa numer: " << i+1 << endl;
        cin>>aktualne_slowo;
        tablica_slow[i] = aktualne_slowo;
    }

    for(i=0;i<ilosc_prob;i++){
        aktualne_slowo = tablica_slow[i];
        cout << "Aktualne slowo do przerobienia: " << aktualne_slowo << endl;
        dlugosc_slowa = aktualne_slowo.length();
        cout << "Dlugosc slowa do przerobienia: " << dlugosc_slowa << endl;
        dlugosc_polowy = floor(dlugosc_slowa/2);
        cout << "Dlugosc polowy slowa int: " << dlugosc_polowy << endl;
        budowane_slowo.clear();
        dodane.clear();
        cout << "Budowane slowo to: " << budowane_slowo << endl;
        for(j=0;j<=dlugosc_polowy;j=+2){
        dodane = aktualne_slowo.at(j);
        budowane_slowo.append(dodane);
        }
        tablica_slow[i] = budowane_slowo;
    }

    cout << "Slowa po transformacji wygladaja nastepujaco: " << endl;
    for(i=0;i<ilosc_prob;i++){
    cout << "Slowo o numerze " << i+1 << " : " << tablica_slow[i]  << endl;
    }
    delete [] tablica_slow;
    cin.sync();
}

当程序到达循环时会出现问题,循环应该使用字符串类中的 '.at' 方法附加 j-index 指向的字母。即使尝试调试它,我也找不到解决方案。你能帮我吗:)?

【问题讨论】:

  • 只是好奇,所有三个 close 票(在此评论时)的原因是 off-topic。根据这篇文章的标签,它似乎正是 on 主题。那么,为什么投反对票?
  • @ryyker:这个问题还没有缩小到一小段代码,它是由一个错字引起的。这是一个问答存储库,很难看出这个问题对除了 OP 之外的任何人有什么用处。
  • 尝试将代码减少到仍然重现错误的最小情况。这通常可以帮助您了解问题而无需提出问题。
  • @LightnessRacesinOrbit - 两者(尤其是未来的用途)都是很好的理由。谢谢。
  • 最好用断点调试程序。然后,您可以本地化问题并将其呈现给我们,以便我们提供帮助。

标签: c++ loops infinite


【解决方案1】:

这里有错别字

for(j=0;j<=dlugosc_polowy;j=+2)

我假设您的意思是 += 而不是 =+

for(j=0;j<=dlugosc_polowy;j+=2)

否则,您只是一遍又一遍地将2 分配给j

【讨论】:

    【解决方案2】:

    您的错误是颠倒了两个字符:
    变化:

     `j=+2` to `j+=2`
       ^^        ^^   
    

    (它的写法j被赋值为2,然后,在它的余生中,一直保持在那里。)

    【讨论】:

      【解决方案3】:
      for(j=0;j<=dlugosc_polowy;j=+2){
          dodane = aktualne_slowo.at(j);
          budowane_slowo.append(dodane);
      }
      

      将 j=+2 替换为 j+=2

      for(j=0;j<=dlugosc_polowy;j+=2){
          dodane = aktualne_slowo.at(j);
          budowane_slowo.append(dodane);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多