Member 13015247 Ответов: 5

Почему мой выход равен 1 со значением n=7?


используя break для ввода чисел до значения n, но max=10, но выход программы равен 1 независимо от значения n

Что я уже пробовал:

#include<stdio.h>
int main()
{
int i=1,n;
printf("enter value of n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
    printf("%d",i);
    if(i=10)
    break;
}
}

выход
enter value of n7
1

jeron1

Взгляните хорошенько на эту строчку.

if(i=10)

Он не делает того, что вы думаете.

Member 13015247

ЭТО НОРМАЛЬНО, И ЗАМЕНА ЭТОГО НА = = РЕШАЕТ ПРОБЛЕМУ, НО КАК = ВЛИЯЕТ НА ЦИКЛ, ВОТ О ЧЕМ Я СПРАШИВАЮ

jeron1

Найди капс-лок, ладно? и нет, это не то, о чем меня спрашивали. '=='- это оператор сравнения, как в "is i equal to 10?", а ' = '- это оператор присваивания, как в " set i equal to 10"

5 Ответов

Рейтинг:
2

Richard MacCutchan

Вам действительно нужно прекратить публиковать эти вопросы; это не способ научиться программированию. Купите себе хорошую книгу на C или C++ и начните читать.


Рейтинг:
1

Patrice T

i=10 назначить 10 к переменной i и
i==10 сравнивает 10 к переменной i.
это очень простой язык Си, вам нужно серьезно его изучить.

Вот ссылки на справочники книг по С и с++ авторов этих языков. Обратите внимание, что C является предком C++, поэтому знание C всегда полезно с C++.
Язык программирования Си - Википедия, свободная энциклопедия[^]
https://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf[^]
http://www.ime.usp.br/~ПФ/Керниган-Ритчи/с-Программирование-электронные книги.формат PDF[^]

Язык Программирования C++ [^]

Обучение использованию отладчика тоже поможет.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
1

Valery Possoz

Привет,

Если у вас нет книг, MSDN может вам помочь.

Взгляните на эту статью:
[^]

Вы заметите, что " = "не означает "равный", так как в равенстве это означает присвоение. Чтобы проверить равенство, вы должны использовать "==".

то, что происходит в вашем коде, заключается в том, что на первой итерации вашего цикла вы присваиваете i 10, и когда он входит в тест for, он вырывается из цикла (как я сейчас 10)

то, что вы должны были сделать, используется if (i==10), и тогда это работает.

Валери


Рейтинг:
0

Dave Kreskowiak

Вам серьезно нужно взять в руки книгу для начинающих по C/C++ и проработать ее.

Вам также нужно научиться использовать отладчик, устанавливать точки останова и проверять содержимое переменных. Отладчик предназначен для отладки вас и вашего понимания кода. Прямо сейчас вы просто догадываетесь, что делает код. У вас нет понимания того, что вы пишете, и размещение вопроса за вопросом на форумах не помогает решить эту проблему. Вы обходите реальное обучение.


Рейтинг:
0

Ramza360

Записка, которая поможет вам в будущих начинаниях. При выполнении условных выражений (включая циклы, где это применимо) его часто легче отлаживать при размещении значений сравнения, которые не могут измениться в левой части проверки.

Возьмем, к примеру, приведенный ниже код. Он действительно делает проверку, но после того, как он устанавливает значение 10 в переменную i. Использовать двойной знак равенства-для проверки равенства.

if (i = 10) 


Однако я хочу подчеркнуть, что если вы разместите неизменяемое значение слева, компилятор будет кричать на вас за подобные ошибки.

if (10 = i) 
// Results in compiler error.

if (10 == i)
// The above is valid now that the debugger threw the exception for you to fix.

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

И, как сказали Дэйв и Ричард, хорошая книга и/или изучение некоторых учебных пособий могут помочь вам решить ваши проблемы.


Ramza360

Почему голос "против", это объясняет проблему и хорошую концепцию программирования.

Dave Kreskowiak

Вероятно, потому, что вы повторили ответ(Ы), который уже охватывал то, что вы сказали.

Ramza360

Все присутствующие здесь повторили предыдущее решение / Комментарии. Я добавил дополнительный фрагмент * справки*, который большинство учебников не укажут на обратное сравнение, чтобы иметь немодифицируемые значения на левой стороне.

Как бы то ни было, у ОП есть несколько ответов, из которых, надеюсь, можно извлечь уроки :)

Dave Kreskowiak

Ты не следишь за тем, что делает этот парень. На самом деле он не прилагает никаких усилий, чтобы чему-то научиться. Он вампир-помощник.

Ramza360

О. о понятненько