首页 > 解决方案 > C_求和函数没有给出预期的结果

问题描述

我一直在研究这个程序,但遇到了障碍。我完成了所有工作,但编译时一个细节无法正常工作。

您将编写一个使用 getch() 函数从键盘读取字符的程序。所有小写​​字母都将转换为大写字母并使用 putchar() 函数打印到显示器上。所有大写字母都将使用 putchar() 打印。所有单独的数字都将被累加,并在程序结束时使用 printf() 打印总和。您将编写自己的函数来返回字母的大写,不要使用 C 库转换函数,以及使用当前字符数字接收当前和的第二个函数,不要使用 C 库转换函数。convert digit 函数将字符数字转换为十进制值,并将数字累加到返回新总和的总和。只有字母不会被打印出来。该程序将继续执行,直到收到返回值,此时数字的总和将打印在下一行。输入的内容: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 库函数)。

谢谢你。

标签: c

解决方案


您将旧的传递sumcvtdigit,您应该添加它,而不是使用未初始化的局部变量。

您可以通过从中减去数字来获得数字的数值'0'

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

推荐阅读