Функция Scanf с символом Char пропускается в C

#c

#c

Вопрос:

Я новичок в программировании на C, и я попытался написать эту базовую программу ниже, но она продолжает пропускать вторую функцию scanf(scanf(«%c», amp; sign)) что бы я ни делал. Есть ли у вас какие-либо идеи по решению этой проблемы? Кроме того, я попытался использовать функцию getchar, но она тоже не сработала.

SS ошибки

 #include <stdio.h>

int main()
{
    int num1, num2, mult, sum, subt;
    char sign;

    printf("Enter two numbers: ");
    scanf("%d%d", amp;num1, amp;num2);

    printf("nEnter operator type: ");
    scanf(" %c", amp;sign);

    if(sign == '*')
        {mult = num1 * num2;
        printf("nResult is %dnna", amp;mult);}

    else if(sign == ' ')
        {sum = num1   num2;
        printf("nResult is %dnna", amp;sum);}

    else if(sign == '-')
        {subt = num1 - num2;
        printf("nResult is %dnna", amp;subt);}

    else
        printf("nOperator is not valid, program has endednna");

system("pause");

return 0;
}
  

Комментарии:

1. сообщение об ошибке в виде текста.

2. Было бы понятно, если бы перед in не было пробела % scanf(" %c", amp;sign); , но он есть. Выведите числовое значение sign после ввода (или с помощью отладчика), а также инициализируйте char sign = 0; с известным значением.

3. Включите предупреждения ( -Wall ) и обратите на них внимание. Вы должны были получить предупреждение в этих операторах printf, что указывает на то, что там что-то не так

4. О — снимок экрана показывает, что вы вводите '-' , поэтому он не «пропускает scanf «.

5. Пожалуйста, замените скриншот текста ошибки самим текстом. Просто скопируйте и вставьте его в свой вопрос.

Ответ №1:

Проблема заключается в этих строках

 printf("nResult is %dnna", amp;mult);
  
 printf("nResult is %dnna", amp;sum);
  
 printf("nResult is %dnna", amp;subt);
  

Уберите амперсанд amp; . Вы не хотите печатать адреса памяти переменных (которые представляют собой большие, кажущиеся случайными числа), вы хотите, чтобы значения сохранялись в переменных.

Комментарии:

1. Большое вам спасибо, проблема решена благодаря вам ^^

Ответ №2:

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

Хороший хорошо работающий компилятор предупредит о:

 int subt;
printf("nResult is %dnna", amp;subt);}
  

с помощью чего-то вроде

 warning: format '%d' expects argument of type 'int', but argument 2 has type 'int *' [-Wformat=]
  

Чтобы не просто решить небольшую проблему, но и перейти к проблемам более высокого уровня, лучшее, чему можно научиться здесь, — это использовать доступные ресурсы, которые помогут вам эффективно писать безошибочный код.

С помощью gcc рассмотрим:

 gcc -pedantic -Wall -Wextra -Wconversion ..."
  

Комментарии:

1. Я использую Code::Blocks с компилятором GNU GCC, но я не знаю, как я собираюсь использовать «-wall» или другие команды для этого компилятора. Как я уже сказал, я новичок в кодировании, не могли бы вы помочь мне в этом?

2. @DorukOzcan может выполнить поиск по «кодовому блоку включить все предупреждения»