программка в си и ее проблемы - вопрос №2169021

#include <conio.h> #include <stdio.h> int main() { int i,x,s=0; for(i=0;i<x;i++){ scanf("%d",&x); s=s+x;} printf("%d", s); return 0; } программа суммирует числа.если вводит сначало любое число и потом 2.то сразу идет вычисление.если наоборот то нет.ждет чтоб ввести 0.почему так?
18.10.16
2 ответа

Ответы

Здравствуйте.
Потому что программа у Вас кривая.
Смотрите что у Вас получается:
Во-первых, переменная x у Вас ничем не инициализирована. Поэтому там вполне может содержаться любой мусор (рандомное некое число > 0, но и отрицательное может быть). Это хорошо если будет 0 (компилятор позаботился) — тогда вы получите просто вывод 0 (в цикл входа не будет) и все.
А если же в x содержится некое «мусорное» положительное значение, тогда будет так:
заходим в цикл for — условие соблюдено (i < некого x)
ждем ввода с клавиатуры
если ввели число 2:
тогда s становится равно 2 (s = 0 + 2)
печатаем s (2)
увеличиваем i на единицу и опять проверяем условие цикла: i < x соблюдено (1 < 2), опять идем внутрь
опять ждем ввода числа
s = 2 + (число введенное новое, x)
и опять увеличиваем i на единицу (i будет = 2) и мы опять проверяем условие цикла — если  i < x, тогда опять идем внутрь, считываем новое x и опять суммируем s.
И так можно до бесконечности, до тех пор пока значение i не будет >= последнего введенного числа x.
В этом случае программа покажет сумму и завершится.

А если же сначала ввести любое число — и потом 2 — цикл завершится после 2 итераций, т.к.
у Вас будет проверка условия i (которое будет = 2 перед началом третьей итерации ) < 2  — ложь. Соответственно, третьей итерации не будет и программа завершается
18.10.16
Логика нормальная, но выход из цикла конечно задан весьма интересно.
Вместе с листингом предоставляйте условие задачи.
20.10.16
Посмотреть всех экспертов из раздела Технологии > C/C++
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store