【发布时间】:2020-01-24 22:53:50
【问题描述】:
我正在写一个整数到罗马数字的转换器。这一次,妥妥的。
尝试解决打印900s、90s、9s的问题;我在while循环中编写了一个for循环(只持续一个循环,因为它的目的是防止打印CMCMCMCM而不是CM)。但是对于for循环的变量,我在while循环中使用了与“n”相同的“n”而没有注意到。
运行它,运行良好;然后注意到所谓的错误。将其换成“A”,将“A”插入到 int cd, cl,..... 列表中。 AAAaa,结果是完全偏离轨道的数字混乱。
我不明白代码如何使用重复使用的循环变量正常工作,但不能使用新的。
#include<stdio.h>
int main()
{
int num, m, c, d, l, x, v, i, n, cm, cd;
printf("Enter Number: ");
scanf_s("%d", &num);
m = num / 1000;
d = (num % 1000) / 500;
c = (num % 500) / 100;
l = (num % 100) / 50;
x = (num % 50) / 10;
v = (num % 10) / 5;
i = (num % 5);
n = m + d + c + l + x + v + i;
while (n > 0)
{
{
for (m; m > 0; m--)
{
printf("M");
}
}
{
for (n=1; n>0; n--)
{
if (num%1000>=900)
{
printf("CM");
d = d - 1;
c = c - 4;
num = num - 900;
}
}
}
{
for (d; d > 0; d--)
printf("D");
}
{
for (n = 1; n > 0; n--)
{
if (num % 500 >= 400)
{
printf("CD");
c = c - 4;
}
}
}
{
for (c; c > 0; c--)
printf("C");
}
{
for (l; l > 0; l--)
printf("L");
}
{
for (x; x > 0; x--)
printf("X");
}
{
for (v; v > 0; v--)
printf("V");
}
{
for (i; i > 0; i--)
printf("I");
}
n--;
}
return 0;
}
请记住,900、400 等的 for 循环没有完成,因为我在编写 900 单循环后注意到了这一点。
【问题讨论】:
-
为什么是循环周围的块?并且绝对可以将其简化为两个循环左右,以说明问题并方便读者。
-
如果您将要转换的值作为参数而不是从标准输入中读取,界面会更简洁。
-
那是
num = strtol(argv[1], NULL, 0);
标签: c loops for-loop while-loop roman-numerals