2015-07-11 4 views
2

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

if (count==0) 
    { 
    low = number; 

    high = number; 

    count++; 

    sum = number; 
    } 
    else 
    { 
    if (number < low) 
     number = low; 

    if (number > high) 
     high = number; 

    count ++; 

    sum += number; 
    } 

не будет проходить через функции 2, как любой более осведомленным с C бы реализовать. Он не будет работать и в основном. Как можно было бы определить введенные пользователем числа, самые высокие, самые низкие и т. Д. К другим функциям? Вот что я до сих пор, цикл и меню работает нормально.

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

int menuChoice() 
{ 
    int choice; 

    printf("1.Enter a number\n"); 
    printf("2.Display Highest Number Entered\n"); 
    printf("3.Display Lowest Number entered\n"); 
    printf("4.Display Average of Numbers Entered\n"); 
    printf("5.Quit\n"); 

    printf("Enter your choice: "); 
    scanf("%i", &choice); 

    return choice; 
} 

int function1() 
{ 
    int number; 

    printf("Enter a number:\n"); 
    scanf("%i", &number); 

    return number; 
} 

int function2() 
{ 

} 

int function3() 
{ 

} 

int function4() 
{ 

} 

int main() 
{ 
    int quit = 0; 
    while (quit != 1) 
    { 
    int menu; 

    menu = menuChoice(); 
    switch (menu) 
    { 
    case 1: 
     function1(); 
     break; 
    case 2: 
     function2(); 
     break; 
    case 3: 
     function3(); 
     break; 
    case 4: 
     function4(); 
     break; 
    case 5: 
     quit = 1; 
     break; 
    default: 
     printf("Please enter 1 through 5\n"); 

    } 
    } 
    return 0; 
} 
+0

отображение меню должно быть в цикле, а затем, когда scanf() возвращает значение, 1) проверьте, что возвращаемое значение из scanf(), а не параметра, (в данном случае) 1. в противном случае getchar() до тех пор, пока EOF или '\ n' не будут прочитаны повторно отобразить меню. 2) после успешного сканированияf() проверьте, что значение чтения находится в диапазоне 1 ... 5. Если не в диапазоне, цикл снова отображает меню (возможно, после отображения сообщения об ошибке. – user3629249

+0

В конце случая по умолчанию в заявлении коммутатора должен быть оператор break_ – user3629249

ответ

2

Давайте рассмотрим некоторые способы улучшения этого кода.

  1. Именование функции - функции должны быть даны четкие и описательные имена, которые позволяют кому-то не знакомый с программой легко понять, что они делают. Такие имена, как function1 и function2 не достигают этого.

  2. Использование соответствующих структур данных - Похоже, что вы пытаетесь отслеживать все введенные пользователем цифры, но в настоящее время у вас нет такого способа сделать это. Лучший способ сделать это будет с массивом, который является контейнером, который содержит другие значения. Чтобы отслеживать числа, которые у вас есть до сих пор, давайте сделаем две переменные - массив, в котором хранятся числа, и целое число, которое отслеживает сколько чисел было введено. А теперь давайте введем до 100 номеров. Мы делаем это, написав int arr[100]; и int numCount = 0; в верхней части программы. Быстрая заметка - это называется глобальная переменная - обычно это не очень хорошая идея, но пока мы не будем беспокоиться об этом.

  3. Отдельный код в соответствующие функции - Вы хорошо это сделаете в своем function1. Он выполняет свою задачу хорошо, а именно, чтобы получить номер от пользователя и вернуть его. Теперь давайте использовать это число. После case 1, давайте напишем

    arr[numCount] = function1(); numCount += 1;

    Это устанавливает первый неиспользованный элемент в массиве на введенный номер, затем увеличил счетчик числа элементов, которые мы имеем.

  4. Не выполняйте ненужные вычисления - Давайте подумаем о том, как мы можем реализовать наши самые высокие и самые низкие функции. Один из способов сделать это - пройти через весь массив каждый раз, когда вызывается функция, и отслеживать наибольшее число, которое мы видели. Это сработает, но в итоге мы продолжим много работы. Что делать, если каждый раз, когда мы получаем новый номер, мы обновляем текущий самый высокий и самый низкий номер, который мы видели?

  5. Использовать циклы для сканирования через массивы - Чтобы рассчитать среднее значение, мы будем использовать цикл for. Посмотрите документацию для этого, если вы этого не понимаете.

Я думаю, вы можете увидеть, как расширить это мышление до вычисления среднего значения введенных значений. Вот что я получил после изменения - http://pastie.org/10285795.

+0

. У меня было два вопросы: 1. Как вы могли объявить переменную нового номера? Просто определив ее в функциях void? 2. Можете рассказать больше о INT_MAX? Я не видел ранее используемого. Я знаю, что если я установлю самый низкий = 0 вместо использования INT MAX, он всегда говорит, что самое низкое число равно нулю. – Session

+0

newNum - это параметр, который вы передаете в круглые скобки, когда вы его вызываете. Он существует только в теле функции. Рекомендуем вам найти учебник о функциях в C, чтобы объяснить это. –

+0

INT_MAX - это ярлык для наибольшего значения, которое целое может взять на ваш компьютер. Подумайте, почему установка минимального значения в 0 не будет работать. сначала сначала до действительно большого числа, а затем сравните любые будущие значения с этим. –

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