我的节目目标:只有字母将被打印出来。程序将继续,直到收到返回,此时数字的总和将打印在下一行。使用getch而不是getchar ... 它假设只打印大写字母。我会失败,因为没有人会使用getch():(
示例用户输入:输入的内容:a9 wF23'; / 4i
打印的内容:该行实际显示的内容:aA9wWFiI
数字的总和是:18
我很好奇为什么会得到回音?它打印出输入3次的字母。现在我想如果我的两个都是真的会打印两次吗?...
***感谢所有我将在早上更新的输入。出于caffine :(
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int digitconversion (int sum, int c);
int caseconversion (int c);
int main(int argc, char *argv[])
{
char c;
int sum = 0;
printf("Please enter a character or characters ");
c = getch();
while (c !='\r') {
c = getch();
if (c >= '0' && c <= '9')
digitconversion (sum, c);
if (c >= 'A' && c <= 'Z')
putchar(c);
if (c >= 'a' && c <= 'z')
{
putchar(c);
c = caseconversion (c);
putchar(c);
}
c = getch();
}
printf("The sum of the digits is %d\n", sum);
return 0;
}
int caseconversion (int c)
{ char u;
u = c - (char)32;
return u;
}
//function converts letter to number
int digitconversion (int sum, int c)
{
sum += (int)(c - '0');
return sum;
}
答案 0 :(得分:3)
请使用标准函数来说明示例(getchar
而不是getch
)。
您的代码中存在很多错误:
while (c !='\r') {
必须是
while (c !='\n') {
if (c >= 'A' && c >= 'Z')
必须是
if (c >= 'A' && c <= 'Z')
digitconversion (sum, c);
必须是
sum = digitconversion (sum, c);
您正在使用3次拨打getch
(一次就够了)
你包括ctype.h
,但使用自己的功能,为什么?使用toupper(c)
和isdigit(c)
。
此代码有效:
#include <stdio.h>
int digitconversion(int c);
int caseconversion(int c);
int main(void)
{
int c, sum = 0;
printf("Please enter a character or characters ");
while ((c = getchar()) != '\n' && c != EOF) {
if (c >= '0' && c <= '9')
sum += digitconversion(c);
if (c >= 'A' && c <= 'Z')
putchar(c);
if (c >= 'a' && c <= 'z') {
c = caseconversion(c);
putchar(c);
}
}
printf("\nThe sum of the digits is %d\n", sum);
return 0;
}
int caseconversion(int c)
{
return c - 32; /* This is not true under EBCDIC encoding, use toupper() */
}
int digitconversion(int c)
{
return c - '0';
}
输出:
Please enter a character or characters abc1234ABC
ABCABC
The sum of the digits is 10