大写转换和数字求和
Upper case conversion and digit summing
我的程序目标:只打印字母,不打印任何其他内容。该程序将继续,直到接收到 return,此时数字的总和将打印在下一行。使用 getch 而不是 getchar ...
假设只打印大写字母。我只是想让它失败,因为没有人会使用 getch() :(
用户输入示例:输入的内容:a9 wF23';/4i
打印的内容:该行实际显示的内容:aA9wWFiI
位数之和为:18
我很好奇为什么我会收到回声?它打印出输入的字母 3 次。现在我想如果我的两个 if 都为真,它会打印两次吗?...
***更新感谢大家的参与我会在早上更新。没有咖啡因:(
#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;
}
请使用标准函数来说明示例(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);
您正在对 getch
进行 3 次调用(一次就足够)
您包含 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
我的程序目标:只打印字母,不打印任何其他内容。该程序将继续,直到接收到 return,此时数字的总和将打印在下一行。使用 getch 而不是 getchar ... 假设只打印大写字母。我只是想让它失败,因为没有人会使用 getch() :(
用户输入示例:输入的内容:a9 wF23';/4i
打印的内容:该行实际显示的内容:aA9wWFiI
位数之和为:18
我很好奇为什么我会收到回声?它打印出输入的字母 3 次。现在我想如果我的两个 if 都为真,它会打印两次吗?...
***更新感谢大家的参与我会在早上更新。没有咖啡因:(
#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;
}
请使用标准函数来说明示例(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);
您正在对 getch
进行 3 次调用(一次就足够)
您包含 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