我需要我的代码在第一个数据输入中输入诸如“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/