我正在为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)
为什么不将它们扫描为字符(字符串)?然后,您可以通过数组偏移量访问它们,方法是从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)
最后的有效数字将为正,因此您可以验证这些数字以满足不同的条件。