Хотя это основной вопрос, точная ситуация отличается от средней. У меня есть char board[] = {"13572"}, представляющий доску (индекс массива — это строка доски, а int (представленный как char) — это количество элементов в этой строке. Если пользователь вводит «3 3» означает, что они хотят изменить количество элементов в индексе 2 на 2 (или, как видит пользователь, изменить количество элементов в строке 3 на 2, также пользователь считает, что индекс от 1 до 4 для Y и 1-7 для X), изменение платы на {"13272"}. У меня возникла проблема, когда ввод может изменить значение в выбранной строке на «/» или «0» вместо желаемого значения. Любой совет приветствуется, соответствующие функции приведены ниже:
Кроме того, board является глобальной переменной. Изменяет символы в массиве на целые (одиночные цифры):
int bd2int (char board[], int index){
char buff[2] = {board[index],'\0'};
return atoi(buff);
}
изменяет доску на основе перемещения (char move[3] в формате «X Y»): я считаю, что проблема здесь, при печати доски в виде строки, если индекс 2 был изменен, доска будет печатать только до индекса 1, указывая, что '\0' был вставлен в индекс 2.
int update(char move[]){
int x;
int y;
x = bd2int(move,0);
y = bd2int(move,2);
x--;
board[y-1] = (char)x;
totalElements= bd2int(board,0)+bd2int(board,1)+bd2int(board,2)+bd2int(board,3);
return 1;
}
char board[] = "13572";
и вы хотите изменить5
на2
, тоboard[2] = '2';
(обратите внимание на кавычки для символьного значения'2' (decimal 50)
, а не десятичного числа2
. - person David C. Rankin   schedule 30.03.2015"X Y"
требуетchar move[4];
(или больше) для хранения завершающего нулевого байта. Создайте MCVE (минимальный, полный, проверяемый пример), который воспроизводит проблему и не требует ввода данных пользователем. - person Jonathan Leffler   schedule 30.03.2015'\0'
, то пользователь, вероятно, что-то делает (например, просто нажимает клавишу[Enter]
), что приводит к неправильному вводу. Нам нужен MCVE, как просил Джохатан. - person David C. Rankin   schedule 30.03.2015board[y-1] = (char)x;
кажется проблематичной, поскольку вы ожидаете, чтоx
будет иметь значение, скажем, 2 (как целое число), но как символ, представляющий символSTX
(начало текста), а не символ'2'
. Вы можете рассмотреть возможность использованияsprint()
, чтобы вернуть ему правильное значение символа. - person akivajgordon   schedule 30.03.2015sprintf()
? Я считаю, что это требует использования указателей, если я не ошибаюсь, я хотел бы иметь возможность избегать использования указателей, но я согласен с тем, что проблема, похоже, связана с этой строкой. - person CSjunkie   schedule 30.03.2015