Привет, сегодня, когда я пробую что-то новое (концепция и стиль, которые внезапно появляются в моей памяти), я столкнулся с несколькими проблемами, которые я не понимаю, почему это произошло.
Код
// This program would get two numbers from user , and request for an arithmetic operator , and carry out arithmetic.
#include <stdio.h>
int main(void)
{
int fNum;
int sNum;
int status = 1;
int operator;
int ans;
printf("Enter the first operand :");
while(scanf("%d" , &fNum) == 0)
;
printf("Please enter the second operand :");
while(scanf("%d" , &sNum) == 0)
;
printf("Which operator you wanted to use\n");
printf("1 for +\n2 for -\n");
while(status)
{
scanf("%d" , &operator);
status = 0;
switch(operator)
{
case 1:
ans = fNum + sNum;
break;
case 2:
ans = fNum - sNum;
break;
default:
status = 1;
}
}
printf("The answer is %d\n" , ans);
return 0;
}
Мой анализ и вопрос
Первая часть:
1.) Есть одна вещь, которую я не понимаю, когдаЯ пытаюсь запустить этот код, я получаю предупреждающее сообщение от компилятора, "C: \ Users \ Znet \ Documents \ Pelles C Projects \ Test1 \ Test.c (10): предупреждение # 2229: Локальные 'ans'потенциально используется без инициализации. ", но, конечно, я все еще могу запустить программу, поскольку это не сообщение об ошибке.
2.) Мне просто интересно, почему это предупреждение появилось из любопытства,вместо того, чтобы просто объявить переменную ans
, я инициализирую ее целочисленным значением (0 или любым целым числом), а предупреждающее сообщение просто исчезло. Что вызывает это? ?? Это потому, что переменная ans
используется вswitch
заявление, поэтому мы должны присвоить значениеперед его использованием? Потому что все время (когда я кодирую другую программу) я даже не инициализирую переменную значением перед тем, как использовать ее для хранения значения, вычисляемого арифметическим выражением.
Вторая часть:
1.) Проблема возникает внутри оператора switch
, когда программа просит пользователя ввести либо число 1
, либо 2
для арифметического знака.
2.) Если я введу целое число не в пределах 1 и 2, программа не продолжит работу, а вместо этого ждала, когда я вернусь к правильному значению, что является моим основным намерением.
3.) Но дело в том, что если значениеЯ ввожу не целое число, а символ, программа просто зависает, курсор все еще мигает, но он не реагирует на мой ввод с клавиатуры. В конце я должен убить программу, чтобы закрыть ее.
4.) Я знаю, что у меня есть много способов кодировать такую программу, но мне просто интересно, почему в этом коде такая ситуация произошла ??
Спасибо, что прочитали мою проблему, надеемся получить от вас объяснения и знания, ребята:)