2016-05-30 4 views
-1

Я создал программу, которая случайным образом назначает роли (задания) членам определенного дома с использованием ввода/вывода файлов. Он успешно работает, но при использовании cout и я действительно вижу результаты, я вижу, почему программа не работает.C++ File Output/Output Вывод чисел вместо chars

Вот фрагмент кода, я считаю, что-то не так с:

std::string foo = std::string("Preferences/") + std::to_string(members[random]) + "-Preferences"; 
    cout << foo << endl; 

А вот члены [случайный] массив, то случайным образом выбирают членов из этого массива и анализа доступных их раз и присвоения им заданий на основе их файла ввода предпочтений.

unsigned const char members[22] = 
{ 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v' }; 

Я создал случайный выборщик чисел, который проходит через 0-21 и присваивает значение, которое он создает, для переменной random. Таким образом, по сути, это члены [случайные] и совершенно случайные.

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

Preferences/116-Preferences 

Но я установил выход для выполнения настроек/участников [случайных] -Примечаний. Он обращается к числу, а не к моим массивам.

Я создал aout < < членов [случайный]; прямо под ним, и каждый раз, когда я запускаю программу, я получаю

Preferences/107-Preferences <---- A random number every time 

    k     <---- random letter every time. 

Так что я знаю, что это должно быть доступ к моим случайным функциям, но назначил его номера! Как исправить это, так что мой правильный выход может быть:

Preferences/t-Preferences 

Пожалуйста, помогите мне, и спасибо!

+0

'станд :: to_string' не принимает символ в качестве входных данных. Просто добавьте символ в строку. – Matt

+0

Мне нужен случайный выход. Мне НЕОБХОДИМО получить доступ к членам [random]. Есть ли std :: to_char? –

ответ

1

Там нет ::std::to_string(char), только (в том числе менее близко) ::std::to_string(int). Таким образом, ваш персонаж фактически преобразуется в свое числовое представление, и вы получаете свой нежелательный результат.

Попробуйте вместо

std::string foo("Preferences/"); 
foo = foo.append(1, members[random]).append("-Preferences"); 

Вариант с использованием строковых потоков:

ostringstream oss; 
oss << "Preferences/" << members[random] << "-Preferences"; 
// get your string via: 
oss.str(); 
+0

Зачем вам большое спасибо! Он работает, но это не так. Пока ваши символы работают и все, каждый раз он выдает символ, который не совсем корректен. Например, иногда вместо обычного y в настройках/y-предпочтениях я получаю странный y с тильдой. Или O с горизонтальной двоеточием. или u с линией над ней. Помогите! –

+0

Эти странные символы произошли несколько раз, затем я отредактировал какой-то код, например, coutouts и другие, и они вроде бы остановились. Спасибо за помощь и не отставайте! –

+0

Странно ... Кажется, что была проблема с кодировкой. Но поскольку ваши члены были только символами ascii, они должны были быть в порядке, даже если ваш файл был закодирован в utf8, latin-1 (iso 8859-1), windows-cp или большинство (но не всех) других (и в этот домен, независимо от того, использует ли char или unsigned char - хотя Сэм В. прав, просто 'char' достаточно ...) – Aconcagua

3

«Чем больше вы overthink сантехники, тем легче затыкать сливы» - Скотти, Star Trek III

Декларирование members быть unsigned char сек ничего полезного не достичь. Достаточно простого char. std::string уже реализует перегруженный + оператор, который принимает параметр char, так что это намного проще, чем вы думали, что это будет:

const char members[22] = { 
    'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v' }; 

// ... 

std::string foo = std::string("Preferences/") + members[random] 
        + "-Preferences"; 
+0

Этот метод дает слишком много ошибок в моей консоли. –

+3

Компиляция без каких-либо проблем.Любые ошибки должны возникать в результате вашего кода, который вы не включили в свой вопрос. –

+0

@SamVarshavchik operator +(): получил меня, лучше, чем 'append' ... +1 – Aconcagua

Смежные вопросы