2014-09-14 5 views
0

Я делаю программу, которая вводит три числа, а затем вычисляет несколько разных вещей (каждая вещь должна быть ее собственной функцией). Программа начинает сообщать пользователю свои параметры и ждет их ввода. После того, как какой-либо из случаев выполнит программу, программа снова выведет меню, за исключением того, что будет использовать случай по умолчанию, затем он распечатает меню и попросит ввести. Любая помощь будет принята с благодарностью. .Программирование на языке C: Переключатель работает дважды

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

void greeting() { 
    printf("Welcome to Dr. Computer's Mathatorium \n"); // this is a seperate function just because 
    printf("Remember to use capital letters when selecting \n"); 
} 

//This getNum function is used to the get the number 
int getNum() 
{ 
    int a; 

    printf("Enter your first integer:"); //tells user to input number 
    scanf("%i", &a); //input 

    return a; 
} 

// gets the sum of the numbers 
int getSum (int f, int g, int h) 
{ 
    return (f + g + h); 
} 

// gets the sum of the numbers 
int getPro (int f, int g, int h) 
{ 
    return (f * g * h); 
} 

// gets the sum of the numbers 
int getAvg (int f, int g, int h) 
{ 
    return (f * g * h)/3; 
} 

// gets the sum of the numbers 
int getLow (int f, int g, int h) 
{ 
    return (f + g + h); //NEEDS ADJUSTING 
} 

main() 
{ 
    int first, second, third, sum, pro, avg, low; 

    char choice; 
    greeting(); 
    do { 
     printf("Main Menu\n"); 
     printf("A) Get Three Integers\n"); 
     printf("B) Display the Sum\n"); 
     printf("C) Display the Product\n"); 
     printf("D) Display the Average\n"); 
     printf("E) Display the lowest\n"); 
     printf("F) Quit\n"); 
     scanf("%c", &choice); 

     //here comes the switches to route the choices 
     switch(choice){ 
     case 'A': 
      first = getNum(); 
      second = getNum(); 
      third = getNum(); 
      printf("first is: %i\n", first); 
      printf("second is: %i\n", second); 
      printf("third is: %i\n", third); 
      break; 

     case 'B': 
      sum = getSum (first, second, third); 
      printf("sum is: %i\n", sum); 
      break; 

     case 'C': 
      pro = getPro (first, second, third); 
      printf("product is: %i\n", pro); 
      break; 

     case 'D': 
      avg = getAvg (first, second, third); 
      printf("average is: %i\n", avg); 
      break; 

     case 'E': 
      avg = getAvg (first, second, third); //NOT DONE YET 
      printf("average is: %i\n", avg); //REMEMBER TO FIX 
      break; 

     default: 
      printf("INVALID CHOICE!\n"); 
      break;  
     } 
    } while (choice != 'F'); 

    return 0; 
} 
+0

Вопрос не очень ясен. Не могли бы вы переделать свои проблемы? –

+0

'do {...} while()' фактически выполняет цикл, а затем проверяет условие. r ищет 'while() {..}' – DOOM

+2

Когда вы вводите «A» и нажимаете новую строку, из вашего терминала отправляются два символа: «A» и «\ n» (новая строка). Новая строка, вероятно, вызывает второе выполнение переключателя. Просто игнорируйте новые строки. – Marian

ответ

-1
scanf("%c[^\n]\n", &choice); 

[^\n] означает, чтобы «читать до \n, в то время как следующего \n выброса символа новой строки из стандартного ввода

+0

Нет, '[^ \ n]' имеет это значение, только если префикс '%' (и он должен входить в строку). –

0

Попробуйте этот код, это программа с некоторыми изменениями:

#include <stdio.h> 


void greeting() { 

printf("Welcome to Dr. Computer's Mathatorium \n"); // this is a seperate function just because 
printf("Remember to use capital letters when selecting \n"); 
} 


int getNum() //This getNum function is used to the get the number 
{ 
int a; 

printf("Enter your first integer:"); //tells user to input number 
scanf("%i", &a); //input 

return a; 
} 
int getSum (int f, int g, int h) // gets the sum of the numbers 
{ return (f + g + h); 


} 
int getPro (int f, int g, int h) // gets the sum of the numbers 
{ return (f * g * h); 


} 
int getAvg (int f, int g, int h) // gets the sum of the numbers 
{ return (f * g * h)/3; 


} 
int getLow (int f, int g, int h) // gets the sum of the numbers 
{ return (f + g + h); //NEEDS ADJUSTING 


} 

int main(void) 
{ 
    int first, second, third, sum, pro, avg; 

char choice; 
greeting(); 
do { 
printf("Main Menu\n"); 
printf("A) Get Three Integers\n"); 
printf("B) Display the Sum\n"); 
printf("C) Display the Product\n"); 
printf("D) Display the Average\n"); 
printf("E) Display the lowest\n"); 
printf("F) Quit\n"); 
fseek(stdin,0,SEEK_END); // change 
choice = getc(stdin); // change 
//scanf("%c", &choice); 

//here comes the switches to route the choices 
switch(choice){ 
    case 'A':  
    case 'a': // change 
     first = getNum(); 
     second = getNum(); 
     third = getNum(); 
     printf("first is: %i\n", first); 
     printf("second is: %i\n", second); 
     printf("third is: %i\n", third); 
     break; 

    case 'B': 
    case 'b': // change 
     sum = getSum (first, second, third); 
     printf("sum is: %i\n", sum); 
     break; 

    case 'C': 
    case 'c': // change 
     pro = getPro (first, second, third); 
     printf("product is: %i\n", pro); 
     break; 

    case 'D': 
    case 'd': // change 
     avg = getAvg (first, second, third); 
     printf("average is: %i\n", avg); 
     break; 

    case 'E': 
    case 'e': // change 
     avg = getAvg (first, second, third); //NOT DONE YET 
     printf("average is: %i\n", avg); //REMEMBER TO FIX 
     break; 

    default: 
     printf("INVALID CHOICE!\n"); 
     break; 

} 
} while (choice != 'F' && choice != 'f'); // change 

    return 0; 
} 
+1

Хотя ваш код может быть именно тем, что требуется OP, было бы более полезно, если бы вы указали и описали свои изменения отдельно. Как бы то ни было, нужно поэтапное сравнение с * find * вашими изменениями; и тогда никто не знает * почему * вы его изменили. – usr2564301

Смежные вопросы