2015-03-24 3 views
0

У меня есть назначение, которое связано с созданием программы на C, где пользователь должен вставить 3 целых числа и на основе ввода, он предоставляет пользователю тип треугольника (только если он действителен), который он создавал бы с этими значениями.Где добавить цикл в этот код?

Сам код работает, мне удалось вставить несколько циклов для условий тестирования и сделать его более надежным.

Однако я хочу предоставить пользователю возможность повторить попытку для разных результатов или просто закрыть программу. У меня есть ощущение, что мне придется добавить еще один цикл while, но я точно не знаю, где и как заставить программу работать именно так.

Петля идеально заменит выход в конце или в случае, когда пользователь либо получает недопустимый треугольник на основе ввода. Когда эти случаи происходят, я хочу это так это дает пользователю возможность попробовать повторить или просто выйти из программы

Смотрите мой код:

#include <stdio.h> 
int main() 
{ 
    /*** Declaring triangle variable sides ****/ 

    float sideA; 
    float sideB; 
    float sideC; 
    char ch; 

    printf("Lets explore triangles! Please insert a value for side 'A' of your triangle:"); 
    while(scanf("%f", &sideA) != 1) 
    { 
    printf("You inserted an incorrect value. Please insert a number for side 'A' of your triangle:"); 
    while ((ch=getchar()) != '\n'); 
    } 

    printf(" Now insert a value for side 'B' of your triangle:"); 
    while(scanf("%f", &sideB) != 1) 
    { 
    printf("You inserted an incorrect value. Please insert a number for side 'B' of your triangle:"); 
    while ((ch=getchar()) != '\n'); 
    } 

    printf(" And finally, insert a value for side 'C' of your triangle:"); 
    while(scanf("%f", &sideC) != 1) 
    { 
    printf("You inserted an incorrect value. Please insert a number for side 'C' of your triangle:"); 
    while ((ch=getchar()) != '\n'); 
    } 

    /*** List of conditions based on user input to identify if the triangle is valid and if so, what type of triangle they get***/ 

    if(sideA <=0 || sideB<=0 || sideC <=0) 
    { 
     printf("YOUR TRIANGLE IS 'INVALID'.\n\n"); 
     printf("REASON: You cannot have a triangle with any side having a value of 0.\n"); 
     printf("Please exit the program and restart it to try again.\n"); 
    } 
    else 
     if((sideA+sideB<sideC) || (sideB+sideC<sideA) || (sideC+sideA<sideB)) 
     { 
      printf("YOUR TRIANGLE IS 'INVALID'.\n\n"); 
      printf("REASON: The sum of every pair of sides must be greater than the third side of a triangle.!\n"); 
      printf("Please exit the program and restart it to try again.\n"); 
     } 
     else 
      if((sideA==sideC && sideB==sideC) || (sideB==sideA && sideC==sideA) || (sideC==sideB && sideA==sideB)) /*** Code to determine EQUILATERAL TRIANGLE***/ 
      { 
       printf("YOUR TRIANGLE IS 'VALID'.\n"); 
       printf(" Your input creates a valid EQUILATERAL triangle.\n"); 
      } 
      else 
       if((sideA == sideB) || (sideB == sideC) || (sideC == sideA))/*** Code to determine ISOSCELES TRIANGLE***/ 
       { 
        printf("YOUR TRIANGLE IS 'VALID'.\n"); 
        printf("Your input creates a valid ISOSCELES triangle.\n"); 
       } 
       else 
        if((sideA!= sideB) && (sideB != sideC))/*** Code to determine SCALENE triangle ***/ 
        { 
         printf("YOUR TRIANGLE IS 'VALID'.\n"); 
         printf("Your input creates a valid SCALENE triangle.\n"); 
        } 
        else 
        { 
         printf("You have inserted invalid range of values, as a result your triangle is invalid.\n"); 
         printf("Please exit the program and restart it to try again.\n"); 
         printf("Goodbye.\n"); 
        } 
return(0); 
} 
+8

Вы бы добавить петлю вокруг частей, которые вы хотите повторить. – immibis

+0

В идеале это были случаи, когда пользователь вставляет недопустимый набор значений, заставляя программу выводить сообщение пользователю. Это будет сразу после этого сообщения. Что бы мне пришлось набирать, чтобы сделать это. Будет ли это похоже на те, которые я уже сделал? – Shivarn

+0

Некоторые общие замечания: (1) Уступка просит вас принять три целых числа. Почему ваша программа использует значения 'float'? (2) Всегда старайтесь избегать повторения кода. Напишите функцию, которая вводит боковую длину от пользователя и возвращает это значение, затем вызывайте ее 3 раза. (например, 'sideA = get_side ('A'); sideB = get_side ('B'); sideC = get_side ('C');' (3) Ваш код будет более читабельным, если вы сохраните свои '' '' ' выровнены с инструкциями 'if', которые предшествуют им. (4) Логика, которую вы используете для проверки равностороннего треугольника, может быть упрощена. Я дам вам понять это самостоятельно. –

ответ

2

это может быть легко достигнуто с помощью делать во время цикла.

Попробуйте этот алгоритм

char a; 
do 
    { 
    /* Your code */ 
    printf(" Do you want to do more (Y/N) "); 
    scanf(" %c",a); 
    } while(a == 'Y' || a == 'y'); 

Теперь, вот что код реализован в коде

#include <string.h> 
#include <stdio.h> 
int main() 
{ 
    /*** Declaring triangle variable sides ****/ 

    float sideA; 
    float sideB; 
    float sideC; 
    char a; 

    do 
    { 

     printf("Lets explore triangles! Please insert a value for side 'A' of your triangle:"); 
     while(scanf("%f", &sideA) != 1) 
     { 
     printf("You inserted an incorrect value. Please insert a number for side 'A' of your triangle:"); 
     while ((getchar()) != '\n'); 
     } 

     printf(" Now insert a value for side 'B' of your triangle:"); 
     while(scanf("%f", &sideB) != 1) 
     { 
     printf("You inserted an incorrect value. Please insert a number for side 'B' of your triangle:"); 
     while ((getchar()) != '\n'); 
     } 

     printf(" And finally, insert a value for side 'C' of your triangle:"); 
     while(scanf("%f", &sideC) != 1) 
     { 
     printf("You inserted an incorrect value. Please insert a number for side 'C' of your triangle:"); 
     while ((getchar()) != '\n'); 
     } 

     /*** List of conditions based on user input to identify if the triangle is valid and if so, what type of triangle they get***/ 

     if(sideA <=0 || sideB<=0 || sideC <=0) 
     { 
      printf("YOUR TRIANGLE IS 'INVALID'.\n\n"); 
      printf("REASON: You cannot have a triangle with any side having a value of 0.\n"); 
     } 
     else if((sideA+sideB<sideC) || (sideB+sideC<sideA) || (sideC+sideA<sideB)) 
     { 
     printf("YOUR TRIANGLE IS 'INVALID'.\n\n"); 
     printf("REASON: The sum of every pair of sides must be greater than the third side of a triangle.!\n"); 
     } 
     else if((sideA==sideC && sideB==sideC) || (sideB==sideA && sideC==sideA) || (sideC==sideB && sideA==sideB)) /*** Code to determine EQUILATERAL TRIANGLE***/ 
     { 
     printf("YOUR TRIANGLE IS 'VALID'.\n"); 
     printf(" Your input creates a valid EQUILATERAL triangle.\n"); 
     } 
     else if((sideA == sideB) || (sideB == sideC) || (sideC == sideA))/*** Code to determine ISOSCELES TRIANGLE***/ 
     { 
     printf("YOUR TRIANGLE IS 'VALID'.\n"); 
     printf("Your input creates a valid ISOSCELES triangle.\n"); 
     } 
     else if((sideA!= sideB) && (sideB != sideC))/*** Code to determine SCALENE triangle ***/ 
     { 
     printf("YOUR TRIANGLE IS 'VALID'.\n"); 
     printf("Your input creates a valid SCALENE triangle.\n"); 
     } 
     else 
     { 
     printf("You have inserted invalid range of values, as a result your triangle is invalid.\n"); 
     } 
     printf("Do you want to try again (Y/N )"); 
     scanf(" %c",&a); 

    }while(a=='Y' || a=='y' ); 

    return(0); 
} 
+0

Будет ли это работать даже после случая, когда он говорит «ВАШ ТРЕУГОЛЬНИК НЕ ИМЕЕТ» «ПРИЧИНА: сумма каждой пары стороны должны быть больше, чем третья сторона треугольника? Как после того, как это будет сказано, тогда он попросит пользователя повторить вопрос? будет ли он по-прежнему применяться к этому? Или мне нужно объявлять цикл while в каждом случае, я хочу, чтобы он повторялся? – Shivarn

+0

@Shivarn, да и нет, вам не нужно добавлять еще один цикл, просто попробуйте его –

+0

Спасибо Арун, он работал отлично, как я хотел.Однако, когда я компилирую программу, я получаю предупреждение 'W8004 Line 79: 'ch' присваивается значение, которое никогда не используется в main функции ... Это что-то нормальное, учитывая, когда мы обсуждали цикл while в последний раз, вы использовали ch чтобы пользователь не вставлял ничего, кроме целого. – Shivarn

0

Place весь код внутри main() в отдельной функции, как HandleOneTriangle()

Тогда внутри основной вы поставите эту петлю (псевдо-код):

main() 
{ 
    while(true) 
    { 
     HandleOneTriangle(); 
     boll answer = AskUserIfHeWantsOneMore(); 
     if(!answer) break; 
    } 
    SayGoodbye(); 
} 
Смежные вопросы