如何打印用户在C中输入的数字的位数?

How to print the number of digits of a number that is entered by the user in C?

你好,我正在尝试编写 C 代码,提示用户输入一个正整数,然后打印出该数字的位数。假设用户输入了一个正整数,则不需要进行错误检查。

我的问题是在按下 'ctrl-d' 之后输出总是:

“位数 = 1”

如果用户键入 1023,程序应打印:

“位数 = 4”

我是 C 的新手,正在尝试了解 scanf 的工作原理。谢谢!

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

int main(void)
{
int count = 0;
char n;
printf("Enter positive int!\n");

   while(scanf("%c",&n) != EOF);
    {
     count++;
    }

printf("# of digits = %d\n", count);
return 0;
}

您可以简单地读入一个字符串,然后使用 strlen() 检查它的长度:

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

#define MAX_LEN 64

int
main(int argc, char** argv)
{
    char buf[MAX_LEN] = {0};

    scanf("%s", buf);    
    fprintf(stdout, "string length: %lu\n", strlen(buf));

    return EXIT_SUCCESS;
}

如果您需要验证输入(即确保它是一个数字),您可以像上面那样读入字符串,并在打印字符串长度之前,遍历每个字符并使用 isdigit()测试该字符是否为整数。如果不是,则输入是负数或其他一些非数字字符。

您可以使用 %d 格式说明符输入带有 scanf 的十进制整数,然后应用以下函数:

int getNumOfDigits(int num, int base /*= 10*/)
{
    int count = 0;

    if (num < 0) {
        num = -num;
    }
    while (num > 0) {
        count++;
        num /= base;
    }
    return count;
}

未经测试,但一般思路是除以 10,然后使用 int 数字的位数:

printf("# of digits = %d\n", getNumOfDigits(number, 10));

请注意,您还应该检查 scanf 的返回值以进行错误处理(当数字格式不正确时)。例如:

if (scanf("%d", &number) != 1) {
    printf("Incorrent input for decimal number!\n");
    exit(EXIT_FAILURE);
}

这是使用 log10()

查找位数的一种方法
#include <stdio.h>
#include <math.h>

int main (void)
{
    unsigned number;
    scanf("%u", &number);
    printf("%.0f\n", ceil(log10((double)number+1)));
    return 0;
}

还有另一种方式,sprintf() returns写入的字符数

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

int main (void)
{
    unsigned number;
    char str[20];
    scanf("%u", &number);
    printf("%d\n", sprintf(str,"%u", number));
    return 0;
}