User 14580640 Ответов: 3

Помогите пожалуйста, у меня много ошибок в коде, пожалуйста, может кто-нибудь их исправить?


Программа на языке Си, которая принимает число от 1 до 10 в качестве пользовательского ввода
(если не указано значение sentinel), проверяет, не является ли число нечетным, и если
не, размножаться пользователя вход по 100, по Через а, выключатель, если
заявления и ключевые слова continue и brake

пример;
User input = 1
output shall be:
"Please enter an even number"
User input = 2
output shall be:
200


Что я уже пробовал:

#include <stdio.h>

int main()
{
    int i, n;
    while(i<10) {
        printf("Enter a number");
        scanf("%d", &n);
        switch(i) {
            
          case 1;
            if(i%2=!0)
            printf("Enter an even number");
            break;
            case 2;
            i=i*100;
          break;
        
        }
    }
}

3 Ответов

Рейтинг:
2

Richard MacCutchan

Ваш оператор switch обслуживает только числа 1 или 2. Но это должно быть переключение на тип числа, то есть нечетное или четное. Поэтому попробуйте сделать следующее:

int oddeven = i % 2;
switch (oddeven)
{
case 0:
    // number is even so do that processinhg
    break;

case 1:
    // number is odd
    break;
}


Рейтинг:
2

Patrice T

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Рейтинг:
1

Nelek

Извините, что я так откровенен, но ... .. у вас не так много ошибок, ваша программа просто ошибочна.

Вы делаете цикл из 10 итераций, где вы просите номер, а затем пытаетесь выполнить некоторые вещи в 2 случаях и забываете другие 8.

Я рекомендую вам перечитать теорию "инструментов", которые вам нужно использовать, потому что я думаю, что вы не поняли ее правильно.

Некоторые соображения:
- Ваш цикл будет продолжать выполняться, даже если вы дадите отрицательные числа (все меньше 10). Какова, по-вашему, "дозорная ценность"?

- Вы используете "переключатель" непосредственно с входом, но рассматриваете только два случая, что происходит с 3, 4, 5 и так далее? Иначе говоря... Я бы не стал использовать для этого выключатель. Кроме того, вам не хватает пути "по умолчанию".


Некоторые направления, чтобы исправить это:
1 - Если вы должны выполнить его до тех пор, пока не будет предоставлено значение sentinel (что бы это ни было), то вы должны сначала запросить входные данные, войти в цикл, если это разрешено while (input != sentinel_value), сделайте то, что вы должны сделать с вводом, а затем попросите и получите следующий пользовательский ввод (в то время как будет проверять его снова и повторять, если это необходимо)
2 - я бы проверил 1 < input < 10 (так как я не знаю, что означает ваше "Сторожевое значение"...), потому что вы не должны ничего выполнять, если т. е. input = -123 (это может быть использование "continue", чтобы избежать остальной части итерации и начать цикл снова)
3 - Если вам нужно использовать переключатель обязательно, хорошим способом его использования может быть разделение четных / нечетных чисел.
4 - Если вы не вынуждены использовать переключатель, то if / else с "input % 2" выполнит эту работу. (если странно, то это может быть еще одно продолжение)
5 - Если вы не используете переключатель, вам понадобится использование инструкции "break", вы можете использовать ее для разрыва бесконечного цикла (альтернатива #1), если задано значение sentinel. Я имею в виду: while (1) { ask - get input, if (sentinel_value) break; else {do the rest} }


Nelek

Добро пожаловать. Проанализируйте то, что я вам сказал, и сравните это с тем, что вы сделали. Перечитайте теорию while / do{...}while() и переключитесь, а затем попробуйте еще раз.
Не забывайте, что отладчик-это большая помощь в поиске вещей самостоятельно (который будет лучшим мастером)

Nelek

Если вы видите его таким негативным... почему вы учитесь программировать?