Почему значение «результат» всегда равно нулю? - PullRequest
0 голосов
/ 05 августа 2020

Я просматриваю MOO C о введении в C ++ и застрял в упражнении о функциях. Это упражнение посвящено программе, которая изменяет число в соответствии с тем, как оно было прочитано.
Например:
«1» читается как «один», поэтому следующее число должно быть
«11», что является читается как "два" следующее число:
"21" -> "один два и один один"
"1211" -> "один один и один два и два одного"
"111221" - > "три единицы, две двойки и одна одна"
"312211" ..... и так далее
Пользователь должен указать начальный номер и количество раз, когда мы должны выполнить эту операцию, а программа должна вывести последнее число. Как и в примере, ввод должен быть «1 5», а программа должна вывести «312211». В программе они просто попросили написать три функции для завершения кода, который они нам дали.

void ajouter_chiffre_droit(int& nombre, int chiffre);
void dire_chiffre(int& nombre, int repetitions_chiffre, int chiffre);
int lire_et_dire(int nombre);

Часть программы, которую они нам дали, такова, и мы должны заполнить три функции, указанные выше:

#include <iostream>
using namespace std;

int separer_chiffre_gauche(int& nombre)
{
  int dix(1);
  int temp(nombre);
  while (temp >= 10) {
    dix  *= 10;
    temp /= 10;
  }
  nombre %= dix;
  return temp;
}

/*****************************************************
 * Compléter le code à partir d'ici
 *****************************************************/

void ajouter_chiffre_droit(int& nombre, int chiffre)
{
}

void dire_chiffre(int& nombre, int repetitions_chiffre, int chiffre)
{
}

int lire_et_dire(int nombre)
{
}

/*******************************************
 * Ne rien modifier après cette ligne.
 *******************************************/

void repeter_lire_et_dire(int& nombre, int fois)
{
  while (fois-- > 0) {
    nombre = lire_et_dire(nombre);
  }
}

int main()
{
  int nombre(1);
  int fois(1);
  cin >> nombre >> fois;
  repeter_lire_et_dire(nombre, fois);
  cout << nombre << endl;
  return 0;
}

Мое решение:

void ajouter_chiffre_droit(int& nombre, int chiffre)
{
    nombre *= 10 + chiffre;
}

void dire_chiffre(int& nombre, int repetitions_chiffre, int chiffre)
{
    ajouter_chiffre_droit(nombre, repetitions_chiffre);
    ajouter_chiffre_droit(nombre, chiffre);
}

int lire_et_dire(int nombre)
{
    int nombre_temp(nombre), chiffre(0), chiffre_prec(0), rep(1), resultat(0);


    chiffre_prec = separer_chiffre_gauche(nombre_temp);
    do
    {
        chiffre = separer_chiffre_gauche(nombre_temp);
        if(chiffre == chiffre_prec)
        {
            ++rep;
        }
        else
        {

            dire_chiffre(resultat, rep, chiffre_prec);
            rep = 1;
            chiffre_prec=chiffre;
            
        }
    }while(nombre_temp!=0);
    return resultat;

}

Функция lire_et_dire всегда возвращает значение 0, и я не знаю, почему, если вы могли бы помочь мне, пожалуйста, будет здорово, спасибо!

Если вы не поняли, что проблема от меня «вероятно», прочтите официальный текст проблемы здесь это упражнение номер 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...