Приведение символов от ввода к строке - PullRequest
1 голос
/ 17 января 2011

fgetc () для обработки введенных символов - char за char. Функция возвращает целочисленное значение введенного символа.

Мне нужно проверить это:

  • Каждый город не должен превышать 30 символов
  • В каждой строке есть символ "-" (тире) (разбивая всю строку на два города)

Я определил 31-int-массив и одно целое число для подсчета символов. Когда пользователь вводит «-», мне нужно сохранить символы в виде строки в другой массив (на самом деле карта).

printf("Enter route (city - city):\n");

char town[31];
int character, charsOnRow = 0, i = 0;
map<int, string> route;

while (!feof(stdin)) {
    character = fgetc(stdin);
    if (character != '-' && character != '\n') {
        if (charsOnRow < 30) {
            town[charsOnRow] = character;
            charsOnRow++;
        } else {
            printf("Invalid input.\n");
        }
    } else if (route.size() == 0 && character == '\n') {
        printf("Invalid input.\n");
    } else {
        town[charsOnRow] = '\0';
        route[i] = town;
        charsOnRow = 0;
    }
}

Таким образом, пример ввода будет следующим:

Syracuse - Utica
Binghamton - Syracuse
Binghamton - Utica

Как мне это исправить и сохранить массив int в map<int, string>?

Ответы [ 3 ]

2 голосов
/ 17 января 2011

У вас есть как технические ошибки (неверный C ++), так и логические ошибки.

Основной причиной этого является сложность ввода за символом.

Возможно, вам будет проще использовать ввод / вывод уровня C ++: объявите переменную std::string для хранения полной строки ввода, прочитайте ее, используя std::getline.

Приветствия & hth.,

0 голосов
/ 17 января 2011

На самом деле fgetc возвращает int, чтобы указать состояние ошибки, если значение <0, у вас возникла ошибка, в противном случае вы можете просто добавить ее в строку, например: </p>

std::string str;
for(;;)
{
  int ch = fgetc(fp);
  if(ch < 0)
    throw error();

  str += ch;
}

Когда вы заполните строку, просто добавьте ее на карту: map [yourIntValue] = str;

Также в вашем коде: char * town [31];

Это массив указателей, правильный для вашего случая: Чартаун [31];

А чтобы добавить его на карту, вы можете просто использовать: map [yourIntValue] = std :: string (town);

0 голосов
/ 17 января 2011

Вам необходимо объявить town как массив символов.В настоящее время у вас есть это как массив символьных указателей.

Изменить

char * town[31];

на

char town[31];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...