2015-09-13 4 views
0

В настоящее время я пытаюсь написать просто простую программу для генерации строки случайных символов для представления имени. Вызов его один раз дает то, что я хочу, однако, если я снова вызову функцию, чтобы сделать фамилию, я получаю тот же результат, что и имя, длина и все. В настоящее время я семя rand наверху(), поэтому я не уверен, что не так/что я могу сделать. Любая помощь будет оценена, спасибо за ваше время.rand() производит те же результаты даже после srand()

Мой код выглядит следующим образом:

int main(void) 
{ 
    srand(time(NULL)); 
    int randomNum = 0; 
    char firstName[12] = { 0 }; 
    char lastName[36] = { 0 }; 
    char fullName[50] = { 0 }; 

    /*for (int j = 0; j < 20; j++) 
    { 
    */ randomNum = rand() % 10 + 2; 
     strcpy(firstName, generateName(randomNum)); 
     printf("First: %s\n", firstName); 

     randomNum = rand() % 34 + 2; 
     strcpy(lastName, generateName(randomNum)); 
     printf("Last: %s\n\n", firstName); 


     //strcat(fullName, firstName); 
     //strcat(fullName, " "); 
     //strcat(fullName, lastName); 

    //} 



    //getchar(); 

    return 0; 
} 

А функция generateName выглядит следующим образом:

char* generateName(int length) 
{ 
    char* randomName = NULL; 

    randomName = (char*)malloc(sizeof(char) * (length + 1)); 
    if (randomName) 
    { 
     randomName[0] = rand() % 26 + 65; 

     for (int i = 1; i < length; i++) 
     { 
      randomName[i] = rand() % 26 + 97; 
     } 
     randomName[length] = '\0'; 
    } 
    return randomName; 

} 

Опять же, спасибо за ваше время.

+0

Платформа, компилятор, библиотека времени выполнения? Несвязанный, но вы пропускаете память, не освобождая результат 'generateName'. –

+0

Извините, поскольку я относительно новый программист, я использую Visual Studio 2013 в Windows 10, надеюсь, что ответ на ваш вопрос. –

+0

Я полный дурак, я полностью не видел, что я печатал во второй раз. –

ответ

4

Я думаю, что вы создаете фамилию все в порядке, но при печати:

printf("Last: %s\n\n", firstName); 
         ^here 

См? Вы печатаете первое имя снова!

Вобще:

printf("Last: %s\n\n", lastName); 

PS: Лучше всего о VisualStudio является его интегрированный отладчик. Вы должны научиться его использовать, и такие ошибки проявятся.

0

Вы печатаете firstName во втором заявлении печати вместо lastName: D В противном случае ваш код в порядке - выдает новое имя в каждом прогоне.

printf ("Last:% s \ n \ n", firstName);