编写一段程序,读取一个正整数,显示其位数。
※注意:代码清单4-10中while语句的循环次数和no的位数一致。
-----出自【明解C语言】练习4-11.
请输入一个正整数:1963
1963的位数是4。
输入样例:
-3
1963
结尾无空行
输出样例:
请输入一个正整数:请不要输入非正整数。
请输入一个正整数:1963的位数是4。
结尾无空行
别人的答案:
# include <stdio.h>
void Input(int * p)
{
printf("请输入一个正整数:");
scanf("%d", p);
}
void weishu(int * p, int * c)
{
int t;
t = *p;
while (t)
{
t /= 10;
(*c)++;
}
}
int trueNumber(int a)
{
if(a>0)
return 1;
else
{
printf("请不要输入非正整数。\n");
return 0;
}
}
void Output(int * p, int * c)
{
printf("%d的位数是%d。\n", *p, *c);
}
int main(void)
{
int a;
int c = 0;
do
{
Input(&a);
}while(!trueNumber(a));
weishu(&a, &c);
Output(&a, &c);
return 0;
}
问题:输入两次负数程序结束
解决方案:在INPUT后面跟一个bool(int)类型的函数去判断正负,负数返回0 正数返回非0,然后导入一个do-while循环
ps:inupt是输入函数,所以后面不用加&(也不知道是不是我想像的这样)
ps:t /=10,就是t除10,因为是整型,每次循环除就少一位,那么*c每次就加1。以此求位数
ps:下面进行的操作是判断正负和解决刚刚所说的问题。