我正在编写一个程序,将罗马数字转换为阿拉伯数字,反之亦然。在我为程序添加了一种检查输入是否为数字或字符串的方法之前,该程序对于这两种程序均运行良好。
现在,除了忽略扫描器上每个字符串中的第一个I之外,其他所有内容仍然有效。随后的Is或任何其他字母都不会发生这种情况。
即
II将I读入romanString
IV将V读入romanString
XX将XX读入romanString
XIX将XIX读入romanString
[I
是Infinity
的一部分,scanf_s("%f",...
消耗了I
,但找不到其余的并返回0。
scanf()
和family是解析变体格式的不良方法。最好用fgets()
读取line,然后解析string。
或如果需要使用scanf_s()
...
char romanString[100];
float arabicNumber=0;
printf("Enter roman or arabic number:");
scanf_s("%99s", romanString, 99); // should be scanf_s("%99s", romanString, 100);
if (sscanf_s(romanString, "%f", &arabicNumber) == 1)
{
printf("Roman numerals: ");
arabicToRoman(arabicNumber);
}
else
{
printf("Arabic numerals: ");
romanToArabic(romanString);
}
我有时会遇到这类问题,请尝试在所有scanf_s之前添加命令fflush(stdin)(如果使用Xcode进行编码,则添加fpurge(stdin)。)>
“ _ fpurge()函数请求丢弃流中的所有未决数据。”在这种情况下,键盘上的待处理数据。