Sscanf - C (СИ)
Формулировка задачи:
Необходимо из строки buf, имеющей следующий формат: " 1 -1 1 1 -1 1" считать значения в массив (int* mas - указатель на него) используя функцию sscanf. Но в массиве почему-то оказываются только положительные единицы.
Подскажите пожалуйста, что не так?
for (int i=0; i<20; i++) { sscanf(buf, "%d", mas + i); }
Решение задачи: «Sscanf»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> int main() { const char *str = " 1 -122 1 -1 1", *s = str; size_t len = strlen( str ), i = 0; int arr[ len ]; int *p = (int*) memset( arr, 0, len * sizeof( int ) ); while ( *s ) { while ( *s == ' ' ) { ++s; ++i; } sscanf( s, "%d", p + i ); while ( isdigit( *s ) || *s =='-' ){ ++s; ++i; } } i = 0; while ( i < len ) fprintf( stdout, "%4d", arr[ i++ ] ); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с функцией sscanf и выводит результат на экран.
- Объявляем переменные: — str — указатель на строку, содержащую числа, разделенные пробелами. — s — указатель на текущий символ в строке. — len — длина строки. — i — счётчик, определяющий номер числа в массиве.
- Создаем массив arr, который будет содержать числа, разделенные пробелами.
- Присваиваем адрес первого элемента массива p и обнуляем его.
- В цикле while считываем каждое число из строки и сохраняем его в соответствующем элементе массива.
- Условие цикла while, которое считывает число, состоит из двух частей: — первая часть — пока текущий символ не равен пробелу, считываем число и переходим к следующему числу; — вторая часть — пока текущий символ является цифрой или знаком минус, считываем число и переходим к следующему числу.
- В конце программы выводим все числа из массива на экран.
- Возвращаем 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д