好的-是的,这是家庭作业,但不是我的。我有一个朋友在参加C ++入门课程,他向我寻求帮助,我帮助他们编写了该程序,但是有一个奇怪的错误我无法弄清。任何有用的建议将不胜感激。谢谢!!

以下是代码。问题在于,在add_loop函数之后,int loop_size将获得一个随机值。在函数内,它具有应该具有的值,但之后它会更改。

#include <iostream>
#include <string>
#include <stdlib.h>
#include <time.h>

using namespace std;
#define STRING_SIZE 50

void get_template (char StemLoop [])
{
    char Template [STRING_SIZE];
    cout<<"Please enter a template for the stem:";
    cin>> Template;
    strcpy (StemLoop, Template);
}

void add_loop (char StemLoop[], int loop_size)
{

    char random_loop [STRING_SIZE];

    int random_array[STRING_SIZE];

    for (int i=0; i<loop_size; i++)
    {
        random_array[i] = rand() % 4;
        if (random_array[i]==0)
            random_loop[i]='A';
        else if (random_array[i]==1)
            random_loop [i]='U';
        else if (random_array[i]==2)
            random_loop [i]='G';
        else if (random_array[i]==3)
            random_loop [i]='C';

    }
    strcat (StemLoop, random_loop);
}

void add_complement(char StemLoop[], int loop_size)
{

    int  x =strlen(StemLoop);
    int j=0;
    char complement [STRING_SIZE]="";
    for (int i=0; i<(x-loop_size); i++)
    {
        if (StemLoop[i]=='A')
            complement[j]='U';
        else if (StemLoop[i]=='U')
            complement[j]='A';
        else if (StemLoop[i]=='G')
            complement[j]='C';
        else if (StemLoop[i]=='C')
            complement[j]='G';
        j++;
    }
    strcat(StemLoop,complement);
}

void main()
{
    int loop_size=0;
    cout<<"Please enter the size of the loop: ";
    cin>>loop_size;

    char StemLoop [STRING_SIZE];

    //Part1: the template
    get_template (StemLoop);

    //This is supposed to be the function that adds the loop of random "genes".
    //It works, and within it the int loop_size is the correct value...
    add_loop (StemLoop, loop_size);
    /*...but here it is a random number.  It's as if the random value generated
    within the function is getting assigned to it.  And of course, it's throwing off the
    entire program.
    */

    //Part#3: the complement
    add_complement (StemLoop, loop_size);
    cout<<"The complete stem-loop strand is:"<<StemLoop<<endl;
}

最佳答案

random_loop中使用strcat时,您不会将其终止为0,因此strcat可以在整个堆栈中进行写入。尝试这个:

random_loop[i] = 0;
strcat (StemLoop, random_loop);


一个更严重的问题可能是您没有检查是否有足够的空间容纳strcat

10-01 20:08
查看更多