我编写以下代码使用C语言将罗马数字转换为十进制数字,但它没有给出正确的答案。我也做了干跑。请帮忙。
#include <stdio.h>
int main()
{
char ch;
int num, newnum=0, result=0;
printf("Enter number:");
scanf("%s", &ch);
while (ch != 'n') {
switch (ch) {
case 'i': num = 1; break;
case 'v': num = 5; break;
case 'x': num = 10; break;
case 'l': num = 50; break;
case 'c': num = 100; break;
case 'd': num = 500; break;
case 'm': num = 1000; break;
}
if (newnum > num) {
result = result - num;
newnum = num;
} else {
result = result + num;
newnum = num;
}
printf("Enter number:");
scanf("%s", &ch);
}
printf("%d", result);
}
答案 0 :(得分:0)
main()
应该写
int main( void )
这不仅仅是一种风格的特征 - 从C99开始,不再允许隐式输入。
scanf("%s", &ch);
不是您想要的 - s
转换说明符期望ch
指向char
的数组的第一个元素,而不是单个char
对象。它告诉scanf
读取非空白字符的序列并将它们存储到缓冲区,它会将零终止符写入该缓冲区的末尾(即存储一个-character string ,你需要一个2元素的char
数组。如上所述,scanf
将写入ch
和紧跟在内存中的字节,这可能会或可能不会在其他地方产生影响。
要从标准输入读取单个字符,请使用
scanf( " %c", &ch ); // note leading blank in format string; this tells scanf
// to skip over any leading whitespace characters
或
int ch;
...
ch = getchar(); // getchar returns int, not char
您可能希望在纸上完成转换算法几次。当您输入i
后跟v
时会发生什么?