Условия соединения с использованием цикла while в C. - PullRequest
0 голосов
/ 08 октября 2011

Программа игнорирует Стоп, когда amt равен 0, пока не будет введено 10 чисел.Программа также не останавливается после ввода 10 номеров.Где моя ошибка?

main() {
int amt;
int tot = 0; /* running total */
int i = 0;   /* counts number of times in loop */
while (amt!=0 || i < 10)
    {
     printf("Enter a number (enter 0 to stop): ");
     scanf("%d", &amt);
     tot = tot + amt;
     i++;
    }
printf("The sum of those %d number is %d.\n", i, tot);

}

Ответы [ 3 ]

3 голосов
/ 08 октября 2011

Ваш тест проводится до назначения amt.Таким образом, его результаты не определены.Этот тест должен быть перенесен в конец итерации, то есть do/while.Хотя вы можете присвоить amt некоторому ненулевому значению, мне это кажется немного неопрятным.

И, конечно же, вы хотите использовать логическое И, а не логическое ИЛИ?Вы хотите продолжить итерацию только в том случае, если оба значения amt отличны от нуля И i<10.

Конечно, если вы перенесли тест в конец итерации, вам придется учитывать этот факт.что i был увеличен внутри цикла.

2 голосов
/ 08 октября 2011

Чтобы остановиться после 10 чисел или amt = 0 (в зависимости от того, что выполнено первым), вам нужно изменить условие цикла на while (amt!=0 && i < 10)

1 голос
/ 08 октября 2011
int amt;

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

...