nkorobkov
@nkorobkov

Почему не работает программа (работа со строками в Си)?

Задание: пользователь вводит строку из 20 символов. Нам необходимо определить какое кол-во раз встретилась в ней каждая цифра. Я решил сделать вот так (почему-то не работает):
#include <stdio.h>
#include <stdlib.h>
#define N 20
int main()
{
    int i, j;
    char string[N];
    int numbers[10];
    for(i = 0; i < 10; i++){
        numbers[i] = 0; //Заполняем массив результатов нулями
    }
    for(i = 0; i < N; i++){
        string[i] = getchar(); //Вводим строку из 20 символов
    }
    for(i = 0; i < N; i++){
        putchar(string[i]); //Выводим строку на экран
    }

    for(i = 0; i < 10; i++){
        for(j = 0; j < N; j++)
            if(string[j] == (char)i) numbers[i]++; //Определяем частоту, с которой встречается каждая цифра
    }

    for(i = 0; i < 10; i++){
        printf("\nNumbers[%d] = %d", i, numbers[i]); //Выводим массив результатов
    }
    return 0;
}

Что я сделал неправильно?
  • Вопрос задан
  • 211 просмотров
Решения вопроса 1
@diskonnect
У вас небольшая ошибка в сравнении символов с цифрами:

if(string[j] == (char)i) numbers[i]++; //Определяем частоту, с которой встречается каждая цифра

Цифры, которые вы вводите с консоли, записываются в память не как десятичные цифры, а как ASCII символы, т.е. если вы ввели с клавиатуры символ '0' и вы считываете его с помощью getchar(), то он у вас сохранится как ASCII значение символа '0' (в десятичной системе представляет собой число 48). Чтобы программа работала, как вы и задумали, нужно из введеного символа вычитать 'смещение' нуля в таблице ASCII:

if((string[j] - '0') == i) numbers[i]++; //Определяем частоту, с которой встречается каждая цифра
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы