退出"退出"键入而不是第一个输入数据

时间:2017-02-06 11:28:24

标签: c while-loop

我需要我的代码在诸如"退出"之类的单词时终止。键入第一个数据输入。我不知道实现这个的正确功能或方法。我的数据是正确的只需要用word命令终止。如有任何建议或解释提示,将不胜感激。

#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;
}

2 个答案:

答案 0 :(得分:2)

要实现这一点,您需要确认所有输入都是文本,然后您可以使用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()

这可以进一步完善,达到让您的用户感到非常舒适和愉快的程度。

此外,由于您没有检查scanf()的返回值,您的程序无法判断输入是否正确(预期的4个浮点数)或是否它失败了,String numberString; int number=123456; // convert int to string numberString = String.valueOf(number); char[] chars = new char[7]; String napis = "S4P6W7M522SC3OXX55K3NN77666N34M2"; char[] array = napis.toCharArray(); // loop which pulls the last six characters int index = 0; for (int i = 0; i < array.length; i++) { if (i >= 26 && i <= 32) { chars[index] = array[i]; index++; } } String Str = new String(napis); System.out.print("String: " + napis); // convert char to string String kod = String.valueOf(chars); System.out.print("Result " + kod); // show new String String newString = napis.replace(kod, numberString); System.out.print("New String: " + newString); 会返回一个值,如果您阅读了一些文档,就可以理解它的含义。

答案 1 :(得分:0)

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

int main(void) {
    double t, xminA, xmaxA, yminA, ymaxA, xminB, xmaxB, yminB, ymaxB;
    double xminC, xmaxC, yminC, ymaxC;
while(1){
    printf("Rectangle A:");
    if (0 == scanf("%lf", &t)){ //<--this if() statement causes the function to terminate at a non-numeric
        printf("Program completed normally");
        break;
    }
    t=xminA;
    scanf("%lf%lf%lf",&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;
}