Заявление заявления в C - PullRequest
0 голосов
/ 13 июля 2011

Кажется, у меня проблема с объявлениями, которые портят мою математику.Любые советы или предложения приветствуются.

Вот код:

int num1, num2, num3, num4, op, ;
    op = ((1==num3) || (2==num4)); 
    num3 = (num1 + num2);
    num4 = (num1 * num2);

Я пробовал много мер и переназначений.Много скомпилировано, но когда 5 + 5 = 2659043, возникает проблема ...

Ответы [ 3 ]

3 голосов
/ 13 июля 2011

Не уверен, что вы пытаетесь сделать, но это то, что делает ваш код:

int num1, num2, num3, num4, op, ;

Эта строка информирует компилятор C о том, что ему нужно выделить пространство для 5 целых чисел (num1, num2, num3, num4, op), теперь эти целые числа можно использовать в качестве переменных до истечения срока действия. Не уверен, почему у вас есть последний "," вы можете удалить это.

op = ((1==num3) || (2==num4)); 

Если num3 равен 1 или num4 = 2, тогда установите op в 1 (true). В противном случае установите op в 0 (false).

num3 = (num1 + num2);

Понятно: добавьте num1 и num2 и поместите сумму в num3.

num4 = (num1 * num2);

Самоочевидно: умножьте num1 и num2 и поместите произведение в num4.

Сразу же я вижу проблему с вашей программой. Вы используете эти переменные, но ни к чему не инициализировали их. Например, как должна быть сумма (num1 + num2), если num1 и num2 не имеют значения. Попробуйте это:

#include <stdio.h>

int main()
{
   int num1, num2, sum;
   num1 = 1;
   num2 = 2;
   sum = num1 + num2;

   printf("sum = %d\n", sum);
}
2 голосов
/ 13 июля 2011

Ладно ... здесь много чего не так, но я покажу, что вы разместили в комментариях, пункт за точкой.

#include <stdio.h>

int main() {
  /*Declare the active agents */
  int num1=0, num2=0, num3=0, num4=0, op = 1 || 2 ;

Здесь вы инициализируете свои переменные равными нулю, кроме op, для которого вы устанавливаете 1 (1 || 2, который является логическим значением или, возвращает 1 (true), поэтому в результате вы устанавливаете op в 1).

  num3 = (num1 + num2);
  num4 = (num1 * num2);

Здесь вы устанавливаете num3 и num4 на ноль, поскольку num1 + num2 - это 0 + 0, а num1 * num2 - это 0 * 0. Вы хотите переместить это значение после вашего scanf.

  /* Information Extraction Method */
  printf("YO MOFO!!!Press a number or hit the dirt!!\n");
  scanf("%d", &num1);
  printf("Since you didn't hit the dirt, how about another number?\n");
  scanf("%d", &num2);

  /* Menu (AKA Input */
  printf("If you want to add, press 1 ,\nIf you want to multiply, press 2 ... \n\n ");
  scanf ("%d", &op);

Эти printf и scanf хороши. Хорошая работа.

  /* PROCESS */
  if (op = 1) {num3;};
  if (op = 2) {num4;};

Три вещи здесь. Во-первых, op = 1 назначает 1 для op. То же самое с op = 2. Вы хотите op == 1 и op == 2, как у вас ниже. Результатом этого будет то, что op всегда будет 2 после этих операторов if.

Во-вторых, хотя и допустимое утверждение, num3; сам по себе ничего не сделает.

Наконец, хотя это ничего не ранит, вам не нужны точки с запятой после закрывающих фигурных скобок.

  /* OutPut */
  if (op == 1) {
    printf("Alone, a toothpick is weak, but as part of a sum, your answer is:\n%d"), &num3;
  };

  if (op == 2) {
    printf("Multiplied as a sum of it's parts, your answer is:\n%d"), &num4;
  };

Здесь вы печатаете адреса num3 и num4 вместо их значений. Это одна из причин, по которой вы видите большие числа, которые не имеют смысла, это адреса num3 и num4 в памяти. Амперсанд (&) нужен только для scanf, а для printf - нет. Кроме того, действительное значение всегда будет равно 0, так как ваши вычисления сделаны до того, как вы получите числа от пользователя.

РЕДАКТИРОВАТЬ: На самом деле, получается, что причина того, что вы не получаете правильные числа здесь, в том, что вы вообще не передаете число в printf. У вас есть num3 и num4 вне скобок. До имени переменной по-прежнему не должно быть амперсанда, но он должен выглядеть следующим образом printf("Multiplied... is:\n%d", num4); Обратите внимание, что num4 находится внутри скобок.

  printf("\n\n\n\nMath frum da hud..... Yo. \n\n\nLOL\n >;]");

  /* End Of Program */
  return 0;
}

Редактировать: Ради ясности, я переписал его так, чтобы он работал так, как вы хотели.

#include <stdio.h>

int main() {
  /*Declare the active agents */
  int num1=0, num2=0, num3=0, num4=0, op = 0;

  /* Information Extraction Method */
  printf("YO MOFO!!!Press a number or hit the dirt!!\n");
  scanf("%d", &num1);
  printf("Since you didn't hit the dirt, how about another number?\n");
  scanf("%d", &num2);

  num3 = (num1 + num2);
  num4 = (num1 * num2);      

  /* Menu (AKA Input */
  printf("If you want to add, press 1 ,\nIf you want to multiply, press 2 ... \n\n ");
  scanf ("%d", &op);

  /* OutPut */
  if (op == 1) {
    printf("Alone, a toothpick is weak, but as part of a sum, your answer is:\n%d", num3);
  };

  if (op == 2) {
    printf("Multiplied as a sum of it's parts, your answer is:\n%d", num4);
  };

  printf("\n\n\n\nMath frum da hud..... Yo. \n\n\nLOL\n >;]");

  /* End Of Program */
  return 0;
}

НТН.

1 голос
/ 13 июля 2011

Вы не инициализировали переменные, поэтому их значения не определены (и, вероятно, не 0). Вы должны инициализировать (например, так):

int num1 = 0, num2 = 0, num3 = 0, num4 = 0, op = 0 ;
...