在c中仅使用scanf计算中的位数
我需要将用户的输入限制为仅为正值,并计算该数字中的位数。用户将只键入长度不超过9个字符的(+/-)整数 我只允许使用scanf函数和for、while或do-while循环(我在类似的问题中看到了如何使用getchar实现这一点,但我只能使用scanf)。除了stdio.h和math.h之外,我不允许使用数组或任何其他库 我知道如果我写: n=scanf(“%c%c%c%c%c”、&a、&b、&c、&e、&f) n将计算成功的scanf转换数 我遇到的问题是,当我用char定义输入时,除了用户必须输入5个字符之外,它完成了我想要的一切。因此,如果用户想要输入“55”,他必须按“5”“5”“回车”“回车” 我需要的程序移动后,第一个“输入”,但也可以灵活地接收一个数字长达9位在c中仅使用scanf计算中的位数,c,C,我需要将用户的输入限制为仅为正值,并计算该数字中的位数。用户将只键入长度不超过9个字符的(+/-)整数 我只允许使用scanf函数和for、while或do-while循环(我在类似的问题中看到了如何使用getchar实现这一点,但我只能使用scanf)。除了stdio.h和math.h之外,我不允许使用数组或任何其他库 我知道如果我写: n=scanf(“%c%c%c%c%c”、&a、&b、&c、&e、&f) n将计算成功的scanf转换数 我遇到的问题是,当我用char定义输入时,除了用户必
再说一遍,我不能使用getchar或任何花哨的东西。这是你在前两周学到的C语言的基本知识 使用scanf将数字读入
长整数
,然后使用带/10的for循环来计算位数
如果输入了-ve号码,您希望程序做什么
#include<stdio.h>
int main()
{
long int a;
int b;
do
{
scanf ("%ld",&a);
if(a<0)
printf ("invalid input");
}while(a<0);
for(b=0;a!=0;b++,a=a/10);
printf("%d",b);
}
#包括
int main()
{
长INTA;
int b;
做
{
scanf(“%ld”、&a);
如果(a,我将采取以下方法
循环是允许的,所以继续设置一个循环
你需要在某个地方有一个变量来跟踪当前的数字
考虑键入一个数字,一次键入一个字符。当前的\u number变量需要做什么
如果按下返回键,则需要停止循环
对于初学者来说,这样做应该可以,但我将把其余的事情留给您,特别是返回检查(ch)
、更新状态(当前值)
和字符到int(ch)
看起来像什么。另外请注意,不要使用函数,可以将自己的函数直接放入代码中
int current_val=0;
int num_digits=0;
char ch="\0"
for (num_digits=0;return_check(ch) && num_digits<=9;num_digits++)
{
fscanf("%c");
current_val=update_state(current_val);
current_val=current_val+char_to_int(ch);
}
int current\u val=0;
int num_位=0;
char ch=“\0”
对于(num_digits=0;return_check(ch)&&num_digits,可以在其周围环绕一个循环,比如(我不知道所有语法是否都正确):
const int max_size=9
int n=0;//输入字符数的计数器
字符a[max_size-1];
做{
scanf(%c,&a[n]);
n++;
}而(a[n]!='\r'&&n类似
#include <stdio.h>
int main(void)
{
char buffer[10] = { 0 };
size_t len;
scanf("%9[0-9]", buffer);
for(len = 0; buffer[len] != 0; len++) ;
printf("%zu '%s'\n", len, buffer);
return 0;
}
#包括
内部主(空)
{
字符缓冲区[10]={0};
尺寸透镜;
scanf(“%9[0-9]”,缓冲区);
for(len=0;buffer[len]!=0;len++);
printf(“%s”\n”,len,缓冲区);
返回0;
}
行,但我不知道它是否适合你的需要
编辑(一些解释)
您可以用int(或无符号int)替换size\u t
,尽管size\u t
更好。如果这样做,请使用%d
或%u
而不是%zu
基本思想是利用scanf格式的一个特性;9[0-9]
表示输入是给定集合中最多9个字符的序列,即从0到9的数字
(…)
的只是一种计算字符数的方法,是strlen
的简单实现。然后我们打印结果。谢谢,这是我需要的。负数将提示“无效输入”打印并将返回循环。更新代码以向您提供无效的输入提示。如果您不允许使用If条件,则用while循环替换If条件很容易。我可以使用If条件。for条件后面应该有分号吗?非常感谢!是的,分号应该在for.t之后想象一下如果没有它会发生什么,它不能正常工作;试着给它输入一个大的int,比如1234444543434555555555
,或者输入一个非数字,比如ddd
,或者一个十位数的数字……或者,magic,输入0
。结果将是错误的;有两个缺陷需要修复。删除它,它不会被使用(包含标题并不意味着要使用它……起初我使用strlen,后来当我意识到您无法使用它时,将其更改为for循环)
#include <stdio.h>
int main(void)
{
char buffer[10] = { 0 };
size_t len;
scanf("%9[0-9]", buffer);
for(len = 0; buffer[len] != 0; len++) ;
printf("%zu '%s'\n", len, buffer);
return 0;
}