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