大写转换和数字求和

时间:2015-02-25 07:05:26

标签: c character

我的节目目标:只有字母将被打印出来。程序将继续,直到收到返回,此时数字的总和将打印在下一行。使用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;
}

1 个答案:

答案 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