c - 当键入 "exit"而不是第一个输入数据时终止程序

标签 c while-loop

我需要我的代码在第一个数据输入中输入诸如“exit”之类的词时终止。我不知道实现此目的的正确功能或方法。我的数据是正确的,只需要用一个字命令终止。如有任何建议或提示以及解释,我们将不胜感激。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void) {
    double xminA, xmaxA, yminA, ymaxA, xminB, xmaxB, yminB, ymaxB;
    double xminC, xmaxC, yminC, ymaxC;
    char end;
    while(1){
        printf("Rectangle A:");
        scanf("%lf%lf%lf%lf", &xminA, &yminA, &xmaxA, &ymaxA);
        printf("Rectangle B:");
        scanf("%lf%lf%lf%lf", &xminB, &yminB, &xmaxB, &ymaxB);

        if(xminA>xmaxB || xminB>xmaxA || yminA>ymaxB || yminB>ymaxA){
            printf("No overlapping area\n");

        }
        else if(xminA<=xmaxB || xminB<=xmaxA || yminA<=ymaxB || yminB<=ymaxA){
            xminC= fmax(xminA,xminB);
            xmaxC= fmin(xmaxA, xmaxB);
            yminC= fmax(yminA, yminB);
            ymaxC= fmin(ymaxA, ymaxB);
            printf("Overlap rectangle: (%lf,%lf) (%lf,%lf)\n", xminC, yminC, xmaxC, ymaxC);
        }
    }
    return EXIT_SUCCESS;
}

最佳答案

要实现这一点你需要承认所有的输入都是文本,然后你可以使用fgets()读取整行输入,检查它是否是exit\n 然后如果没有继续将输入转换为您想要的数字,检查它们是否已成功转换并在未成功转换时采取措施。

例子

char line[256];
if (fgets(line, sizeof line, stdin) == NULL)
    return -1; // Something bad happened
if (strcmp(line, "exit\n") == 0)
    return 0; // The user typed `exit'
if (sscanf(line, "%lf%lf%lf%lf &xminA, &yminA, &xmaxA, &ymaxA) == 4) {
    // Got the first rectangle, now do the same for the second
    // rectangle
}

如您所见,这应该是一个函数,以便您允许用户在第一个矩形输入成功后键入 exit

这可以进一步完善,使您的用户感到非常舒适和快乐。

此外,由于您不检查 scanf() 的返回值,您的程序无法判断输入是否正确(预期的 4 个 float ) 或者如果它失败,scanf() 返回一个值,如果您阅读一些文档,您就可以理解它的含义。

关于c - 当键入 "exit"而不是第一个输入数据时终止程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42066680/

相关文章:

c - 读取/写入在我的 TCP 代码中不起作用

c - C中简单赋值语句中的错误

c - 系统调用包装器 asm C

c++ - 如何退出 do while 循环? C++

javascript - 鼠标移动后无限循环

c++ - 不能退出 while 循环,(C++)?

c++ - 在您指定的 wxWidgets 目录中找不到匹配的调试配置。

捕获操作码 0xCC 作为异常

variables - PHP - if 语句和 while 循环内的变量范围

PHP MYSQL 循环检查 mysql 数据库中是否包含 LicenseID 值