C _求和函数未得到期望的结果

时间:2019-02-28 17:31:14

标签: c

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

  

您要编写一个程序,该程序可以从键盘读取字符   使用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 :(得分:1)

您要将旧的sum传递给cvtdigit,应该添加到此,而不要使用未初始化的局部变量。

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

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

答案 1 :(得分:1)

问题出在您的sum函数中:

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

来自sum的原始main存储在d中。您最终要做的是创建一个未初始化的名为num的新变量,将d的值(即sum中的main)添加到未初始化的{{1 }并返回该值。这就是为什么您得到奇怪的数字。

更改功能以删除sum并添加sum(应重命名为d)和sum的值,首先减去c,即'0'中字符0的字符代码,因此您可以得到0到9之间的值。

c