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, чтобы указать, что программа успешно завершилась.