【问题标题】:C _ Summing function not giving desired resultC_求和函数没有给出预期的结果
【发布时间】:2019-02-28 17:31:13
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 你能试着控制这个缩进吗?
  • sum = cvtdigit(sum,c);? sum = cvtdigit(sum,d);?最后一个参数有错别字?

标签: c


【解决方案1】:

问题出在你的 sum 函数中:

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

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

更改函数以删除sum并添加d(应将其重命名为sum)和c的值,首先从@987654335中减去'0',即字符0的字符代码@ 所以你得到一个从 0 到 9 的值。

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

【讨论】:

  • 您能解释一下为什么在减去“0”时,我们会得到实际的数字值吗?它在功能上确实有效,但我不知道为什么。
  • @legallyalienated 字符'0'到'9'的编码值保证是连续的。所以'0' - '0' 是 0,'1' - '0' 是 1,'2' - '0' 是 2,等等。
【解决方案2】:

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

你可以通过减去'0'得到一个数字的数值。

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

【讨论】:

    猜你喜欢
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    相关资源
    最近更新 更多