C строка вопроса - PullRequest
       1

C строка вопроса

0 голосов
/ 11 июля 2011

Все, что я просто хочу сделать, - это сделать запись, которая начинается с C или D случайным образом и имеет номер 1-10. поэтому запись будет C10. Может кто-нибудь сказать мне, что я здесь делаю не так?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#include <time.h>
#include <unistd.h>
#include <sys/types.h>

/*
 *
 */
int main(int argc, char** argv)
{
    char letter[] = { 'C', 'D' };
    char record[2];
    int r=1;
    while (r < 11)
    {
            char num;
            num = r;
            record = (letter[rand()%2],num);
            r++;
    }
 return 0;
}

Ответы [ 3 ]

3 голосов
/ 11 июля 2011

Для одного очевидного момента, «C10» требует 4 символа, при условии, что вы хотите, чтобы он был как обычная строка C (3 в строке + 1 NUL-терминатор), но вы только освободили место для 2.

По крайней мере, если вы хотите, чтобы ваши 1-10 были текстовыми символами, вы обычно хотели бы сделать что-то вроде:

sprintf(record, "%c%d", letter[rand()%2], num);

Не то чтобы это имело большое значение, но вы, похоже, включили лот ненужных заголовков для того, что вы делаете.

2 голосов
/ 11 июля 2011

Вы хотите, чтобы символы «0» - «9» появлялись, но вы присваиваете цифровому значению ra значение от 0 до 10. Проверьте таблицу символов ASCII .

Я бы попробовал это так:

char record[4];
for (unsigned r = 0; r <= 10; ++r) {
   snprintf(record, sizeof(record), "%c%d", letter[rand() % 2], r);
}
2 голосов
/ 11 июля 2011
record = (letter[rand()%2],num); 

Это не законное возражение ... попробуйте это:

record[0] = letter[rand()%2];
record[1] = num;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...