Неожиданный вывод с условием if

#c #if-statement #assignment-operator #comparison-operators

#c #если-заявление #назначение-оператор #операторы сравнения

Вопрос:

Я хочу создать программу для вычисления суммы первых n натуральных чисел

Код, который я пробовал:

 #includelt;stdio.hgt;  void main()  {  int sum=0,i=1,n;  printf("Enter the number upto where you want to print add : ");  scanf("%d",amp;n);  printf("nSUM = ");  while(ilt;=n)    {  if(ilt;n)  {  printf("%d ",i);  }  if(i=n)  {  printf("%d",i);  }  sum=sum i;  i  ;  }  printf("nThe sum of the first %d numbers is : %d",n,sum);  return 0;  }  

И ожидаемый результат будет, если n=5

 Enter the number upto where you wnat to print add :  sum =1 2 3 4 5  The sum of the first %d numbers is : 5  

Но то, что я получаю, это

 sum=1 5  and the value is 5  

Но когда я использую if else вместо двух if , это работает

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

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

Ответ №1:

Проблема в вашем утверждении if :

 if(i=n)  

Один = — это назначение; то, что вы хотите, — это сравнение с==, так что :

 if(i==n)  

Ответ №2:

Вы использовали i=n вместо i==n в операторе if.

Ответ №3:

Вы используете оператор присваивания = вместо оператора сравнения == в выражении в этом операторе if

 if(i=n)  {  printf("%d",i);  }  

Тебе нужно написать

 if( i == n)  {  printf("%d",i);  }  

Также лучше использовать цикл for вместо цикла while.

Например

 for ( int i = 0; i lt; n; ) {  printf(   i == n ? "%d" : "%d ", i );  sum  = i; }  

Переменная i используется только в цикле. Поэтому он должен быть объявлен в области, в которой он используется.

Всегда старайтесь объявлять переменные в минимальных областях, в которых они используются. Это сделает ваши программы более удобочитаемыми.

Обратите внимание, что в соответствии со стандартом C функция main без параметров должна быть объявлена как

 int main( void )