我遇到的问题是,我想取一个整数并将其分开。例如:用户输入:23432。控制台应打印“ 2 3 4 32。我遇到的问题是存储该数字。例如
User Input : 2020
assign input to num.
digit = 2020 % 10 = 0 <--- 1st Digit
num = num / 10 = 202
digit2 = num % 10 = 2 <--- 2nd Digit
num = num / 100 = 20.2
temp = round(num) = 20
digit3 = num % 10 = 0 <--- 3rd Digit
digit4 = num / 10 = 2 <---- 4th Digit
这种方法的问题在于它取决于用户输入,我正在使用范围1-32767,所以我不知道要创建多少个数字变量。使用我创建的结构,有人可以协助其以某种方式运行,无论数字是多少,数字都以我所描述的方式保存并打印出来?
int Rem(int num);
int Div(int num);
int main() {
int num;
printf("Enter an integer between 1 and 32767: ");
scanf("%d", &num);
Rem(num);
Div(num);
printf("%d","The digits in the number are: ");
}
int Rem(int num) {
int rem = num % 10;
return rem;
}
int Div(int num){
int div = num / 10;
return div;
}
答案 0 :(得分:0)
这种方法的问题在于它取决于用户输入,我正在使用范围1-32767,所以我不知道要创建多少个数字变量。
计算一下。您可以通过将变量每次增加10倍来完成此操作,直到再增加一次使其大于输入数字即可:
int num;
printf("Enter an integer between 1 and 32767: ");
scanf("%d", &num);
int div = 1;
while(div * 10 <= num)
div *= 10;
然后,您可以将数字除以该除数,以获得每个数字,每次将除数除以10,即可一次移位一位。
printf("The digits in the number are: ");
while(div > 0)
{
printf("%d ", (num / div) % 10);
div /= 10;
}
答案 1 :(得分:0)
这是一种非常复杂的方法。为什么不读取字符串,并像这样解析字符串:
int main(void) {
char buf[256]; // should be big enough, right? 10^256-1
memset(buf, 0, 256];
puts("enter something : ");
if( NULL == fgets(STDIN, 255, buf)) {
perror("Egad! Something went wrong!");
exit(1);
}
// at this point, you already have all the input in the buf variable
for(int i=0; buf[i]; i++) {
putchar( buf[i] ); // put out the number
putchar( ' ' ); // put out a space
}
putchar( '\n' ); // make a nice newline
}
如上所述,它允许任何字符,而不仅仅是数字。如果要限制为数字,则可以过滤输入内容,或在for循环中添加一个检查项...取决于您要完成的工作。
答案 2 :(得分:0)
C允许您非常优雅地处理问题的一种方法是通过递归。
考虑一个例程,该例程只知道如何打印数字的最后一位,如果需要,请在其前面加上空格。
void printWithSpaces(int neblod)
{
// Take everything except the last digit.
int mene = neblod / 10;
// Now extract the last digit
int fhtagn = neblod % 10;
// Check if there are leading digits
if (mene != 0)
{
// There are, so do some magic to deal with the leading digits
// And print the intervening space.
putchar(' ');
}
putchar(fhtagn + '0');
}
好。这样很好,除了我们可以用来“做一些魔术来处理前导数字”之外?
我们不只是将它们打印为带有适当中间空格的数字序列吗?
不是void printWithSpaces(int neblod)
那样吗?
因此,我们进行了一项更改:
void printWithSpaces(int neblod)
{
// Take everything except the last digit.
int mene = neblod / 10;
// Now extract the last digit
int fhtagn = neblod % 10;
// Check if there are leading digits
if (mene != 0)
{
// There are, so print them out
printWithSpaces(mene);
// And print the intervening space.
putchar(' ');
}
putchar(fhtagn + '0');
}
您完成了。
出于好奇,下面有关C递归的文章可能既有趣,又对我稍微不寻常的变量名选择有所了解。 ;)http://www.bobhobbs.com/files/kr_lovecraft.html