C程序查找总位数

时间:2017-09-22 20:05:10

标签: c printf getchar digit

我编写了这个程序来查找用户输入的一行文本的总位数。我在使用getchar()时遇到错误。我似乎无法弄清楚我做错了什么?

#include <stdio.h>

#define MAX_SIZE 100

void main() {
    char c[MAX_SIZE];
    int digit, sum, i;
    digit, i = 0;

    printf("Enter a line of characters>");
    c = getchar();
    while (c[i] != '\n') {
        digit = 0;
        if (c [i] >= '0' && c[i] <= '9') {
            digit++;
        }
    }
    printf("%d\n", digit);
}

我将使用sum变量添加我找到的所有数字。但我在getchar()行收到错误。 HELP ??

3 个答案:

答案 0 :(得分:3)

您可以输入&#34;文字行&#34;不使用数组。

#include <stdio.h>
#include <ctype.h>

int main(void) {                    // notice this signature
    int c, digits = 0, sum = 0;
    while((c = getchar()) != '\n' && c != EOF) {
        if(isdigit(c)) {
            digits++;
            sum += c - '0';
        }
    }
    printf("%d digits with sum %d\n", digits, sum);
    return 0;
}

请注意,c的类型为int。大多数库的字符函数都不使用char类型。

编辑添加了数字的总和。

答案 1 :(得分:0)

Weather Vane的答案是最好最简单的答案。但是,为了将来参考,如果要迭代(循环)一个数组,使用for循环会更容易。此外,您的main函数应返回一个int,如下所示:int main()。您需要在主函数的末尾添加return 0;。这是程序的修改版本,它使用for循环遍历字符数组。我使用gets函数从控制台读取一行字符。它会等待用户输入字符串。

#include <stdio.h>
#define MAX_SIZE 100

int main()
{
    char c[MAX_SIZE];
    int digit = 0;

    printf("Enter a line of characters>");
    gets(c);

    for (int i = 0; i < MAX_SIZE; i++)
    {
        if (c[i] == '\n') break; // this line checks to see if we have reached the end of the line. If so, exit the for loop (thats what the "break" statment does.)

        //if (isdigit(c[i])) // uncomment this line and comment or delete the one below to use a much easier method to check if a character is a digit.
        if (c [i]>= '0' && c[i] <= '9')
        {
            digit++;
        }
    }

    printf("%d\n", digit);
    return 0;
}

答案 2 :(得分:0)

获取整数中的位数很容易使用log.h()函数,该函数在math.h头文件中定义。考虑一下这个程序

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main (int argc, const char *argv[]) {
    system("clear");

    unsigned int i, sum = 0, numberOfDigits;
    puts("Enter a number");
    scanf("%u", &i);
    numberOfDigits = (int) (log10(x) + 1);

    system("clear");

    while(i != 0) {
        sum += (i % 10);
        i /= 10;
    }

    fprintf(stdout, "The sum is %i\n", sum);
    fflush(stdin);
    return 0;
}