从C中的长整数中提取个别数字

nof*_*ofe 8 c

我正在为C课程(第一门编程课程)做作业.部分分配是编写代码,以便用户输入长达9位的数字,程序需要确定这个数字是"增加"/"真正增加"/"减少"/"真正减少"/"增加和减少"/"真正减少并且真正增加"/"不减少而不增加".(总共7个选项)

由于这是我们的第一项任务,除了课堂上教授的内容外,我们不允许使用任何其他内容:

do-while,for,while循环,else-if,if,break,continue scanf,printf,modulo和基本运算符

(除了stdio.h之外我们不能使用任何库)

而已.我不能使用数组getchar或任何这些东西.我可以用来接收用户输入的唯一功能是scanf.

到目前为止,我已经用流程图和所有内容编写了算法,但我需要将用户的输入分成不同的数字.

例如,如果用户输入"1234 ...",我想在a中保存1,在b中保存2,依此类推,然后在所有数字之间进行比较,以确定它们是否全部相等(增加和减少) )或者a> b> c ...(减少)等等.

我知道如何使用%和/运算符分隔每个数字,但我无法弄清楚如何将这些值"保存"在一个变量中,以后我可以用于比较.

这是我到目前为止:

printf("Enter a positive number : ");

do {
    scanf ("%ld", &number);
    if (number < 0) {
        printf ("invalid input...enter a positive integer: ");
        continue;
    }
    else break;
} while (1);

while (number < 0) {
    a = number % 10;
    number = number - a;
    number = number / 10;
    b = a;
}
Run Code Online (Sandbox Code Playgroud)

Eva*_*ski 5

为什么不将它们扫描为字符(字符串)?然后,您可以通过数组偏移量访问它们,方法是从ASCII字符代码中减去48的偏移量。您可以使用isdigitctype.h 来验证字符是否为数字。


编辑

由于您的教授所施加的难以置信的局限性:

#include <stdio.h>

int main()
{
  int number;
  printf("Enter a positive number: ");

  do
  {
    scanf ("%ld", &number);
    if (number < 0)
    {
      printf ("invalid input...enter a positive integer: ");
      continue;
    }
    else break;
  } while (1);

  int a = -1;
  int b = -1;
  int c = -1;
  int d = -1;
  int e = -1;
  int f = -1;
  int g = -1;
  int h = -1;
  int i = -1;

  while (number > 0)
  {
    if (a < 0) a = number % 10;
    else if (b < 0) b = number % 10;
    else if (c < 0) c = number % 10;
    else if (d < 0) d = number % 10;
    else if (e < 0) e = number % 10;
    else if (f < 0) f = number % 10;
    else if (g < 0) g = number % 10;
    else if (h < 0) h = number % 10;
    else if (i < 0) i = number % 10;

    number /= 10;
  }

  /* Printing for verification. */

  printf("%i", a);
  printf("%i", b);
  printf("%i", c);
  printf("%i", d);
  printf("%i", e);
  printf("%i", f);
  printf("%i", g);
  printf("%i", h);
  printf("%i", i);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

最后的有效数字将为正,因此您可以验证这些数字以满足不同的条件。

  • 我在上面列出了我对这项工作的限制...问“为什么不这样做”或那无关紧要。您可能还会问我,为什么我还要学习C(为什么不学习Java?C ++?)。我是因为那是我的大学对我的要求 (2认同)
  • 如果可以扫描整数,则可以扫描字符。数组偏移量基本上是加法,满足基本运算符的限制。 (2认同)