我一直在研究这个项目,我遇到了障碍。我完成了所有工作,但是一个细节在编译时无法正常工作。
您将编写一个程序,使用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库函数)。
谢谢。
问题出在你的sum函数中:
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'
中减去c
,即字符0的字符代码,以便获得0到9之间的值。
int cvtdigit(int sum, char c)
{
sum=sum+(c-'0');
return sum;
}
你将旧的sum
传递给cvtdigit
,你应该添加它,而不是使用未初始化的局部变量。
您可以通过从中减去'0'
来获得数字的数值。
int cvtdigit(int sum, char c)
{
int d = c - '0';
sum += d;
return sum;
}