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;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы с функцией sscanf и выводит результат на экран.
  2. Объявляем переменные: — str — указатель на строку, содержащую числа, разделенные пробелами. — s — указатель на текущий символ в строке. — len — длина строки. — i — счётчик, определяющий номер числа в массиве.
  3. Создаем массив arr, который будет содержать числа, разделенные пробелами.
  4. Присваиваем адрес первого элемента массива p и обнуляем его.
  5. В цикле while считываем каждое число из строки и сохраняем его в соответствующем элементе массива.
  6. Условие цикла while, которое считывает число, состоит из двух частей: — первая часть — пока текущий символ не равен пробелу, считываем число и переходим к следующему числу; — вторая часть — пока текущий символ является цифрой или знаком минус, считываем число и переходим к следующему числу.
  7. В конце программы выводим все числа из массива на экран.
  8. Возвращаем 0, чтобы указать, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы