【问题标题】:Incorrect input warning comes more than once不正确的输入警告不止一次出现
【发布时间】:2016-01-23 14:04:11
【问题描述】:

我的程序中有错误输入的问题。它从数组中的坐标读取坐标并计算最大长度。它应该一直读到 EOF。坐标的正确格式是例如[5,10]。问题是,当我写例如“自卫队”。然后我得到 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;
}

【问题讨论】:

  • 使用int c; while((c = getchar()) != '\n');清除无效输入的stdin
  • 谢谢,它可以工作,但是 EOF (CTRL+D) 不会结束程序。

标签: c input eof


【解决方案1】:

如果scanf 没有读取所有格式(即在您的情况下,它返回小于5),那么您将不同步,因为下一次调用scanf 将尝试从最后一个位置读取剩下一个。

我建议你先使用fgets 读取整行,然后使用sscanf 解析输入。 IE。像

while (fgets(buffer, sizeof(buffer), stdin) != NULL)
{
    c1 = sscanf(buffer, ...);
    ...
}

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多