@Anvario0

Почему функция выводит нули?

Задача: написать на си программу, которая ищет число в строке и выводит его на экран. Например, строка "aaa010101bbb343ccc" - программа должна для начала найти число 010101, вывести его на экран, затем программа должна найти число 343 и вывести его на экран.
Мой код:
int func(char a[]) {
for (int i = 0; i < strlen(a); i++)
{
char nummas[100];
int num = 0;
int numcount = 0;
if (a[i] >= '0' && a[i] <= '9') {
nummas[i] = a[i];
}
else {
num = atoi(nummas);
printf("%d", num);
continue;
}
}
}
int main()
{
char f[100] = "aaa010101bbb343ccc";
func(f);
}
по какой-то причине в ответе получаются нули.
  • Вопрос задан
  • 141 просмотр
Пригласить эксперта
Ответы на вопрос 2
@rPman
nummas[i] = a[i];
тут ты в буфер nummas складываешь найденную цифру не с начала строки, а с позиции i которая для нее уже в середине, а так как изначальна строка нулями заполняется, atoi думает что строка пустая и возворащает 0
ты должен завести еще переменную для номера символа в nummas и не забудь перез atoi добавить в еще символ с кодом 0 чтобы затереть предыдущее значение (иначе если сначала найдешь длинное число а потом короткое, при выводе котороткое смешается с длинным)

настоятельно рекомендую отлаживать свою программу, по шагам проходить весь алгоритм и проверять что должно быть в каждой переменной и что туда складывает твоя программа, все ошибки сразу станут видны
Ответ написан
Комментировать
@KryOne
Есть небольшие ошибки при работе со строками в стиле C и индексами массива. Немного переписал функцию, вроде работает.

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

void func(char a[]) 
{
    int startIndex = 0;
    int endIndex = 0;
    for (int i = 0; i < strlen(a); i++)
    {
        int num = 0;
        int numcount = 0;
        if (a[i] >= '0' && a[i] <= '9') 
        {
            // Ищем начальный и конечный индексы числа.
            startIndex = i;
            endIndex = strlen(a) - 1; // вычитаем 1 т.к. исключаем 0-символ.
            for (int j = startIndex; j < strlen(a); j++)
            {
                if (a[j] < '0' || a[j] > '9')
                {
                    endIndex = j - 1;
                    break;
                }
            }

            // формируем число.
            char number[100];
            int k = 0;
            for (int l = startIndex; l <= endIndex; l++)
            {
                number[k] = a[l];
                k++;
            }
            number[k] = '\0'; // Строки в стиле C должны заканчиваться 0-символом.
            
            printf("%d\n", atoi(number));

            i = endIndex;
        }
    }
}

int main()
{
    char f[100] = "aaa010101bbb343ccc";
    func(f);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы