如何打印用户在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;
}
你好,我正在尝试编写 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;
}