Каждый «элемент» строки C представляет собой один символ, а не «число» в том смысле, что «10» - это одно число. Например, эти объявления эквивалентны:
char a1[] = "1 10 20";
char a1[] = {'1', ' ', '1', '0', ' ', '2', '0', 0};
char a1[] = {49, 32, 49, 48, 32, 50, 32, 0};
/* The 0 at the end is the NUL terminator, which tells the C library
that the string ends at that point */
Если вы создаете a1
и a2
как массивы, вы можете добавить соответствующие элементы.
int a1[] = {1, 10, 20};
int a2[] = {4, 5, 6};
Но я предполагаю, что у вас есть необходимость разбирать их как строки, и вы не можете просто создавать массивы непосредственно, например, для чтения данных из стандартного ввода (обычно с клавиатуры) или из файла. Я вижу, что вы используете функцию atoi
для преобразования строки в число. Но функция atoi
не возвращает сколько цифр она проглотила. Таким образом, i++;
пропустит слишком мало цифр, если не будет добавлено 1-значное число. Кроме того, использование одной переменной (i
) для хранения индекса в обеих строках работает только тогда, когда числа в каждой строке начинаются с того же индекса, то есть когда каждый элемент имеет одинаковое количество цифр.
Чтобы это исправить, вам нужно сделать две вещи:
- Используйте отдельный указатель на каждый из
a1
и a2
массивов. Каждый указатель указывал бы на часть уже прочитанного массива. Таким образом, после чтения двух целых чисел из каждой строки один указатель указывает на конец «10», а другой - на «5».
- Используйте
strtol
function, который возвращает указатель на конец части строки, которую прочитала функция. Затем вы можете использовать этот указатель, чтобы пропустить минус число, а затем (вручную) пропустить прошлые пробелы, пока не нажмете следующую цифру (используйте isdigit
) или терминатор NUL.
Пожалуйста, покажите свой код, как вы вычислили всю вещь. – Rizier123
Должен быть нормализован до операции. – BLUEPIXY
'{1, 10, 20}' означает '11020' или' 1 * 100 + 10 * 10 + 20 * 1' ?? Вы имеете в виду или? – BLUEPIXY