C ++ Int получает случайное значение после функции, которая не должна его менять - PullRequest
0 голосов
/ 17 января 2012

Хорошо - да, это домашняя работа, но не моя. У меня есть друг, который прошел вводный курс 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;
}

1 Ответ

3 голосов
/ 17 января 2012

Вы не заканчиваете 0 * random_loop, прежде чем использовать его в strcat, поэтому strcat может записывать все по вашему стеку.Попробуйте это:

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

Более серьезная проблема может заключаться в том, что вы не проверяете, достаточно ли места для strcat.

...