输入警告错误不止一次

时间:2016-01-23 14:04:12

标签: c input eof

我的程序输入错误有问题。它从坐标中读取坐标并计算最大长度。它应该读到EOF。正确的坐标格式是例如[5,10]。问题是,当我写例如“asdf”。然后我得到4x不正确的输入,我只想要它一次。有人能帮助我吗?提前谢谢。

 while ((c1=(scanf(" %c %lf %c %lf %c", &f, &cx, &g, &cy, &h))) != EOF){
 if (c1 != 5 || h != ']' || g != ',' || f != '['){
        printf("Incorrect input. \n");
        continue;
    }


    for (int i = 0; i < pocet; i++) {
        u = polex[i] - cx;
        v = poley[i] - cy;

        result = sqrt((u*u) + (v*v));
        if (result>max){
            max = result;
        }

    }
    printf("Max: %g\n", max);
    max = 0;
}

1 个答案:

答案 0 :(得分:5)

如果scanf未读取所有格式(即在您的情况下返回的格式少于5),那么当您对scanf的下一次调用尝试时,您将失去同步阅读最后一个停止的地方。

我建议您先使用fgets来读取整行,然后使用sscanf来解析输入。即

之类的东西
while (fgets(buffer, sizeof(buffer), stdin) != NULL)
{
    c1 = sscanf(buffer, ...);
    ...
}