Switch: Объявлен Переменный внешний переключатель и используйте его в нем - PullRequest
0 голосов
/ 18 февраля 2011

Это не просто проблема, вызывающая проблемы:

int s,p;
        scanf("%d",s);
switch(s)
{
    case 1:
    {
    p=10;
    break;
}
case 2:
    {
    p=15;
    break;
}
}
printf("%d",p);

Проблема в том, что p печатает случайное и очень большое число, что его вызывает?

Итак, я воспользовался некоторыми вашими советами и знаю, что у меня есть следующий код:

int s,p=0;
        scanf("%d",&s);
switch(s)
{
    case 1:
    {
    p=10;
    break;
}
case 2:
    {
    p=15;
    break;

}
default:
{
    printf("Number invalid");
    return 0;
}
}
printf("%d",p);

Теперь я всегда буду по умолчанию, даже если я введу только 1 или 2

Хорошо, теперь это сработало. Спасибо всем!

Ответы [ 4 ]

3 голосов
/ 18 февраля 2011

У вас есть две проблемы: (i) p не инициализирован и (ii) вы передаете s в scanf, где требуется адрес s.

Изменение:

int s,p;
scanf("%d",s);

до:

int s, p = 0;
scanf("%d", &s);
1 голос
/ 18 февраля 2011

Объявление "int p" назначает p произвольному значению: что бы ни находилось в памяти.Теперь, если s не равен 1 или 2, это значение никогда не меняется, и это то, что вы видите.Что вы можете сделать, это

  • добавить default: предложение к вашему switch () и присвоить p что-то значимое там
  • объявить p как "int p = 0;"
1 голос
/ 18 февраля 2011

Какой номер вы сканируете? Возможно, у вас нет регистра переключателя для этого числа, что означает, что p неинициализировано (и, следовательно, случайно). Например, если вы введете 3, для 3 нет оператора case, а p будет содержать случайное значение. Я бы посоветовал вам обнаружить неверный ввод в случае по умолчанию, в котором вы назначаете значение от 0 до p.

default:
    p = 0;

Исправленный код:

int s,p;
scanf("%d", &s);

switch(s)
{
    case 1:
    {
        p=10;
        break;
    }
    case 2:
    {
        p=15;
        break;
    }

    default:
    {
        p=0;
        break;
    }
}
printf("%d",p);

Редактировать: Исправлена ​​проблема scanf для Пола R

0 голосов
/ 18 февраля 2011

Вы можете использовать значение по умолчанию, а затем попытаться выяснить, что было отсканировано в

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...