我正在使用fscanf(fp, "%d", &n)
函数从文件中读取整数。
有没有办法知道没有循环的数字有多少位?
答案 0 :(得分:4)
您可以尝试:
int count = 0;
fscanf(fp, "%d%n", &n, &count);
%n
说明符输入count
到目前为止读取的字符数。
但是,这个数字可能比n
的位数大,因为%d
说明符允许在读取数字之前跳过空白字符。
检查@ pmg的answer以了解如何计算这些空格。
答案 1 :(得分:3)
int optionalwhitespace, characters;
if (fscanf(fp, " %n%d%n", &optionalwhitespace, &n, &characters) != 1) /* error */;
characters -= optionalwhitespace;
// characters now has the number of characters read to interpret the value in n
答案 2 :(得分:2)
是的,将其作为字符串阅读:
char buffer[256];
fscanf(fp, "%s", buffer);
int length = strlen(buffer);
注意:如果是负数,您可能需要对-
符号进行折扣...
假设你仍然想要整数值:
int n = atoi(buffer);
答案 3 :(得分:1)
使用log
函数:
int number_of_digits(unsigned int i)
{
return (int)(log(i+1) / log(10)) + 1;
}
int main (void)
{
int i = 52;
printf("%d has %d digits\n", number_of_digits(i));
}
答案 4 :(得分:1)
对于代码高尔夫球场方法,只需返回snprintf()
width = snprintf(0, 0, "%u", (unsigned) n);
答案 5 :(得分:0)
您可以使用snprinf
,这是比itoa
更好的选择:
int x = 0;
scanf( "%d", &x );
char buffer[20] = "";
snprintf(buffer, sizeof(buffer), "%d", x);
printf( "num of digits = %d", strlen(buffer) );
答案 6 :(得分:0)
试试这个:
#include <math.h>
number > 0 ? (int) log10 ((double) number) + 1 : 1;
答案 7 :(得分:0)
您可以只计算该数字的log10
并将其四舍五入:
int length = ceil(log10((double)n)) + 0.5;
+ 0.5
用于将浮点数转换为整数,因为像3这样的数字不能在浮点表示中显式写入(int)3.0
可能会产生2.我假设ceil
没有' t通过0.5
返回答案,这是永远不会发生的。
答案 8 :(得分:0)
有没有办法知道没有循环的数字有多少位?
递归解决方案
unsigned digit_count(unsigned x) {
if (x >= 10) return digit_count(x /10) + 1;
return 1;
}
答案 9 :(得分:-1)
#include<math.h>
//rest of program
fscanf(fp, "%d", &n)
int length = (int)(log10(n)) +1;
//rest of program