我一直在研究这个程序,但是遇到了障碍。我已完成所有工作,但一个细节在编译时无法正常工作。
您要编写一个程序,该程序可以从键盘读取字符 使用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库函数)。
谢谢。
答案 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