【发布时间】:2020-07-18 06:45:56
【问题描述】:
我无法获得结果。我写的当前程序是将每个数字相乘以得到下一个数字和下一个数字,直到数字变成一个数字。
例如,
77 - 49 - 36 - 18 - 8 : repeats 4 times679 - 378 - 168 - 48 - 32 - 6 : repeats 5 times
我的代码的问题是numbers that process %d times\n之后没有结果出来
我猜output() 是问题.. 但我真的一直在寻找错误。
#include <stdio.h>
#pragma warning (disable : 4996)
void inputUInt(int*, int*, int*);
void myFlush();
int transNumber(int);
void output(int, int, int);
int main()
{
int start, end, gNum; // start number, end number, how many times until the number becomes a single digit
inputUInt(&start, &end, &gNum);
output(start, end, gNum);
return 0;
}
void inputUInt(int* startp, int* endp, int* gNump)
{
while (1) {
printf("#start number : ");
scanf("%d", startp);
if (*startp >= 100 && getchar() == '\n') {
break;
}
else { ; }
myFlush();
}
while (1) {
printf("#last number : ");
scanf("%d", endp);
if (*endp <= 10000 && *endp > * startp && getchar() == '\n') {
break;
}
else { ; }
myFlush();
}
while (1) {
printf("# gNum : ");
scanf("%d", gNump);
if (*gNump > 0 && *gNump <= 10 && getchar() == '\n') {
break;
}
else { ; }
myFlush();
}
return;
}
void myFlush()
{
while (getchar() != '\n') {
;
}
return;
}
int transNumber(int num)
{
if (num >= 1000) {
num = (num / 1000) * ((num % 1000) / 100) * ((num % 100) / 10) * ((num % 10) / 1);
}
else if (num >= 100) {
num = (num / 100) * ((num % 100) / 10) * ((num % 10) / 1);
}
else if (num >= 10) {
num = (num / 10) * ((num % 10) / 1);
}
else { ; }
return num;
}
void output(int start, int end, int gNum)
{
int i, num, transN, count = 0, gNumTotal = 0;
printf("numbers that process %d times\n", gNum);
for (i = start; i <= end; i++) {
num = i;
transN = transNumber(num);
while (transN > 10) {
count++;
}
}
if (count == gNum) {
printf("%d\n", i);
gNumTotal++;
}
else { ; }
printf("total numbers : %d numbers", gNumTotal);
return;
}
【问题讨论】:
-
使用调试器。它会立即告诉你程序正在
while (transN > 10) { count++; }中循环。这应该让你看到这显然是一个无限循环,因为transN永远不会改变价值。这只是基本的调试 101。 -
为什么你觉得有义务在所有
if语句中添加else { ; }?它给代码增加了不必要的混乱,但收益甚微。 -
我被告知在编码中建议添加
else{ ; },因为它告诉读者代码已经完成并且不会错误地错过 else 语句。猜猜我被教错了?还是老师的编码风格? -
in function:
myflush()about:while (getchar() != '\n') {也应该检查 EOF -
关于;
else { ; }这种说法无效。建议删除该语句的所有实例
标签: c digits multiplication