2017-02-06 2 views
0

Мне нужен мой код для завершения, когда на первый ввод данных вводится слово «выход». Я не знаю, что это за правильная функция или метод. Мои данные верны, просто нужно завершить с помощью команды 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; 
} 
+0

Ну, вы должны были бы позволить пользователю для ввода «выхода», и все это начинается с проверки возвращаемого значения 'scanf' – StoryTeller

+0

в настоящее время, если пользователь вводит«выход»программа отображает«нет перекрывающейся области "бесконечно. –

+0

@KamiKaze: «* fgets' устарел *»: Что ?! Нет. Вы имеете в виду 'gets()' правильно? – alk

ответ

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() вашей программы не может сказать, было ли ввод правильно (ожидаемой 4 номера с плавающей точкой) или, если это не удалось, scanf() возвращает значение, и вы можете понимаете, что это имеет смысл, если вы читаете какую-то документацию.

+0

Боюсь, я не понимаю, можете ли вы добавить комментарии к моему коду? или если есть другой способ. –

+0

Есть много способов, этот простой и легкий. Почему ты не понимаешь? И что? –

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; 
} 
Смежные вопросы