您好我正在尝试编写提示用户输入正整数的C代码,然后输出该数字中的位数。假设用户输入正整数,则不需要进行错误检查。
我的问题是在按下'ctrl-d'后输出始终为:
“#of digits = 1”
如果用户键入1023,则应打印该程序:
“#of digits = 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;
}
答案 0 :(得分:1)
您可以使用%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);
}
答案 1 :(得分: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()
进行测试如果该字符是整数。如果不是,则输入为负数或其他非数字字符。
答案 2 :(得分:0)
以下是使用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()
返回写入的字符数
#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;
}