2013-03-15 4 views
1

Для программы, которую я пытаюсь написать, я должен создать программу, которая просит пользователя ввести число и вычислить общее число всех введенных чисел, пока пользователь не запустит -1, чтобы остановить цикл. Тем не менее, я не могу распечатать -1 или добавить его в общую сумму, но я борюсь с этим.Loop program issue

#include <stdio.h> 

int main() 
{ 
    int x, total; 

    total = 0; 
    x = 0; 

    while (x <= -2 || x >= 0) 
    { 

     printf("Please enter a number: "); 
     scanf("%d", &x); 

     printf("You entered %d \n", x); 

     totalSum = total + x; 
     printf("total is %d \n", total); 

    } 

    printf("Have a nice day :) \n"); 
    printf("total is %d \n", total); 

    return 0; 
} 

Любые предложения относительно того, как я могу остановить цикл в -1 без печати или добавления к общей сумме?

ответ

2

Вы можете проверить, если вход равен -1 в начале цикла, если так выйти вместо вычисления:

while(1) { 
    printf("Please enter a number: "); 
    scanf("%d", &x);  

    if (-1 == x) 
     break; 

    ... 
} 
+0

О, так мне нужно было добавить условие, чтобы разбить цикл? Спасибо, проанализировав это, он стал мне более ясным. – user2092535

+0

@ user2092535 право, сломайте цикл раньше, когда он должен :) –

0

Мне очень жаль, но я просто передергивает когда я вижу while(1) петля, управляемая исключительно условным разрывом. А что-то вроде:

printf("Please enter a number: "); 
while(scanf("%d", &x) == 1 && x != -1) 
{ 
    // do work 

    printf("Please enter a number: "); 
} 

Один жулика к этому методу печать дублируется, но я считаю, что про того в то время как на самом деле диск условного цикла больше, чем составляет для него. Дополнительным преимуществом является то, что scanf также проверяется здесь, чтобы убедиться, что он правильно прочитал следующее значение.