Я хочу сделать программу C, которая принимает строку разделенных пробелами целых чисел в качестве входных (положительных и отрицательных, переменное число цифр) и преобразует строку в массив int.
Существует еще один вопрос при чтении int из строкового ввода в массив в Stack Overflow, но он не работает для чисел с длиной цифр более 1 или отрицательных чисел.
Попытка:
#include <stdio.h>
int main() {
int arr[1000], length = 0, c;
while ((c = getchar()) != '\n') {
if (c != ' ') {
arr[length++] = c - '0';
}
}
printf("[");
for (int i = 0; i < length-1; i++) {
printf("%d,", arr[i]);
}
printf("%d]\n", arr[length-1]);
}
Если я ввожу следующее в терминале:
$ echo "21 7" | ./run
$ [2,1,7]
Это массив, который я получаю: [2,1,7] вместо [21,7 ]
Если я ввожу следующее:
$ echo "-21 7" | ./run
$ [-3,2,1,7]
Я получаю: [-3,2,1,7] вместо [-21,7], что не имеет смысла.
Однако, если я вхожу:
$ echo "1 2 3 4 5 6 7" | ./run
$ [1,2,3,4,5,6,7]
Примечание: Я предполагаю, что вход это всегда строка разделенных пробелами целых чисел. не
Почему «длина» не инициализируется каким-либо значением перед использованием? – babon
Я исправил это. Я замечаю, что я использую 'getchar', который сканирует 1 символ за раз. Будет ли «сканировать» здесь? Но это не объясняет, почему я получаю '[-3,2,1]' для '-21'. – user6005857
Вы получаете '-3', потому что ASCII для' -' меньше, чем ASCII для '0'. 'getchar()' получает только один символ, независимо от того, какой символ, поэтому вы обрабатываете знак минуса как число. – Arc676