【发布时间】:2018-10-04 22:59:48
【问题描述】:
我有这段代码,它提示用户输入一个二维向量,我想建立错误保护,所以如果输入一个字符、符号等而不是一个字符,它会打印一个错误并再次提示。假设这段代码完美运行:
vect getVector(void)
{
vect temp;
bool flag = false; /* For repetition we use an
* input flag initialized to false */
while (flag == false)
{
printf("Enter a vector in the format x y: ");
if((scanf("%f%f", &temp.x, &temp.y)) != 2)
printf(" >Input Failure!\n");
else
flag = true; /* Input OK */
clearBuffer(); /* A function I defined elsewhere */
}
return temp;
}
输入“1.w 2.5”或“a.c 3.2”之类的内容可以很好地使用错误保护。但是,输入“1.2 3.c”或“1.6 2.54p”(以字符结尾的任何内容)它只会忽略并丢弃该字符。 “1.2 3.c”读作“1.2 3.0”,“1.6 2.54p”读作“1.6, 2.54”等等。
如何构建保护以检测此尾随字符并打印错误消息?希望我可以轻松地在我已经拥有的东西中构建一些东西。
有人建议我将输入存储在字符串中并测试 ASCII 码,如果它们在数字范围内,则将它们转换回浮点数,但我不知道这是怎么回事完毕。此外,我想知道为什么代码会忽略那个尾随字符,也许我可以自己想一个解决方案。也许最初尝试检测角色?对不起,如果这是一个愚蠢的问题,我就是无法理解它。
【问题讨论】:
-
scanf()仅读取执行格式字符串中请求的转换所需的输入。我想有办法用scanf()做你想做的事,但更好的是fgets()、strtok()和strtod()的解决方案。请参阅我的beginners' guide away from scanf() 以获得一些见解(它只处理整数,但我想你可以转移到strtod())。 -
如果你想做任何体面的错误处理,不要使用
scanf。