C _ Функция суммирования не дает желаемого результата - PullRequest
0 голосов
/ 28 февраля 2019

Я работал над этой программой и попал в контрольно-пропускной пункт.Я сделал все, но одна деталь не работает сразу после компиляции.

Вы должны написать программу, которая читает символы с клавиатуры, используя функцию getch ().Все буквы в нижнем регистре будут преобразованы в верхний регистр и выведены на дисплей с помощью функции putchar ().Все заглавные буквы будут напечатаны с использованием putchar ().Все отдельные цифры будут собраны, а сумма будет напечатана в конце программы с использованием printf ().Вы напишете свою собственную функцию, которая будет возвращать верхний регистр буквы, не будете использовать функции преобразования библиотеки C, а вторая функция, которая получает текущую сумму, используя текущую цифру символа, не будет использовать функции преобразования библиотеки C.Функция преобразования цифр преобразует символьную цифру в десятичное значение и накапливает цифру в сумму, возвращающую новую сумму.Только буквы будут распечатаны больше ничего.Программа будет продолжаться до тех пор, пока возврат не будет получен, и в это время сумма цифр будет напечатана на следующей строке.Что было введено: a9 wF23 '; / 4i То, что на самом деле показывает строка: aAwWFiI Сумма цифр: 18

Ниже я опубликовал то, над чем уже работал.Porgram делает все, кроме той части, где необходимо суммировать целые числа (которые изначально были символами, но были преобразованы).Это дает мне очень большое число, намного большее, чем сумма введенных цифр.

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#define ctrlz 26

char cvttoupper(char);
int cvtdigit(int, char);

int main ()
{
    int sum, d;
    char c, cupper;
    sum = 0;
    do  
    {   
        c = getch();

        if (c>='A' && c<='Z' || c>='a' && c<='z' )
        {   
            putch(c);
            if(c>='a' && c<='z')
            {   
                cupper = cvttoupper(c);
                putch(cvttoupper(c));                                       
            }   
        }   
        if (c>='0' && c<='9')
        {   
            d=c&0x0F;             
            sum = cvtdigit(sum,c);                      
        }   
    }   while (c != ctrlz);

    printf("\nThe sum of the digits is: %d\n", sum);

    system ("PAUSE");
    return 0;
}

char cvttoupper(char c)
{
    char cupper;
    cupper= c & 0x5F;
    return (cupper);
}

int cvtdigit(int d, char c)
{
    int sum;
    sum=sum+d;
    return (sum);        
}

Буду признателен за любые отзывы о том, как заставить суммирующую часть работать правильно.Я подозреваю, что это способ, которым аргументы перечислены с каждой функцией, которая не является правильной.(Я должен был создать функции сам, не мог использовать функции библиотеки C).

Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Проблема в вашей функции сумм:

int cvtdigit(int d, char c)
{
    int sum;
    sum=sum+d;
    return (sum);        
}

Оригинал sum из main хранится в d.В конечном итоге вы создаете новую переменную с именем num, которая не инициализируется, добавляя значение d (т.е. sum в main) к неинициализированному sum и возвращая это значение.Вот почему вы получаете странные числа.

Измените функцию, чтобы удалить sum и добавьте значение d (которое вы должны переименовать в sum) и c, сначала вычтя '0' т.е. код символа для символа 0 от c, поэтому вы можете получить значение от 0 до 9.

int cvtdigit(int sum, char c)
{
    sum=sum+(c-'0');
    return sum;
}
0 голосов
/ 28 февраля 2019

Вы передаете старую sum в cvtdigit, вы должны добавить к ней, а не использовать неинициализированную локальную переменную.

Вы получаете числовое значение цифры, вычитая '0' изит.

int cvtdigit(int sum, char c)
{
    int d = c - '0';
    sum += d;
    return sum;        
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...