2013-02-12 3 views
0

Я застрял в упражнении по программированию, которое я должен делать для домашней работы. Я подошел так близко к его завершению, но я просто не могу понять, как программа попросит пользователя «Ввести следующий набор ограничений» в конце без добавления новой записи на старый вход.Как я могу заставить эту C-программу принимать новый вход, не добавляя его на старый вход?

Вот вопрос именно так, как он появляется в моей книге:

написать программу, которая запрашивает нижние и верхние целые пределы, вычисляет сумму всех целых квадратов от квадрата нижнего предела до площади верхнего предела и отображает ответ. Затем программа должна продолжать запрашивать ограничения и отображать ответы до тех пор, пока пользователь не введет верхний предел, который равен или меньше нижнего предела. Образец запуска должен выглядеть примерно так:

Enter lower and upper integer limits: 5 9 
The sums of the squares from 25 to 81 is 255 
Enter next set of limits: 3 25 
The sums of the squares from 9 to 625 is 5520 
Enter next set of limits: 5 5 
Done 

Вот код, который я написал:

#include <stdio.h> 

int main(void) 
{ 
    int index, lower, upper, square, total, input; 

    printf("Enter lower and upper integer limits: "); 

    for (input = scanf("%d %d", &lower, &upper); input == 2; printf("Enter the next set of limits: \n"), scanf("%d %d", &lower, &upper)) 
    { 
     for (index = lower; index <= upper; index++) 
     { 
      square = index * index; 
      total += square; 
     } 
     printf("The sums of the squares from %d to %d is %d\n", lower * lower, upper * upper, total); 
    } 

    return 0; 
} 

Любая помощь будет высоко ценится! Я работаю над этим более часа.

Update, вот что у меня есть сейчас, но это все-таки не право, так как он не печатает «сделано», когда верхние и нижние пределы одинаковы:

включает

Int основных (вакуума) { индекс int, нижний, верхний, квадратный, общий;

printf("Enter lower and upper integer limits: "); 

while (scanf("%d %d", &lower, &upper) == 2) 
{ 
    total = 0; 
    for (index = lower; upper > index; index++) 
    { 
     square = index * index; 
     total += square; 
    } 
    printf("The sums of the squares from %d to %d is %d\n", lower * lower, upper * upper, total); 
    printf("Enter the next set of limits: \n"); 
} 


return 0; 

}

UPDATE* ****

Благодаря помощи каждому я думаю, что я, наконец, получил его:

включает

INT Главный (void) { индекс int, нижний, верхний, квадратный, общий;

printf("Enter lower and upper integer limits: "); 



while (scanf("%d %d", &lower, &upper) == 2) 
{ 
    while (lower < upper) 
    { 
    total = 0; 
    for (index = lower; index <= upper; index++) 
    { 
     square = index * index; 
     total += square; 
    } 
     printf("The sums of the squares from %d to %d is %d\n", lower * lower, upper * upper, total); 
     printf("Enter the next set of limits: \n"); 
     scanf("%d %d", &lower, &upper); 

} 
    printf("Done"); 
} 

return 0; 

}

+0

Подсказка: Я не вижу каких-либо тест на «верхний» больше чем «ниже» в вашем коде. – StarNamer

ответ

0

Просто оберните код:

while(upper > lower) { 
... 
} 

(. И инициализировать upper и lower соответствующим образом в цикл)

+0

Hi William. Я не уверен, как это помогает ... Я инициализировал общее число до нуля, как предложил paddy, и это позаботилось о проблеме проблемы, когда программа добавила новый вход на старый вход, однако я все еще не могу понять чтобы заставить его читать «сделано», когда пользователь вводит верхний и нижний предел, который является номером имени ... – user1992348

1

Я действительно ненавижу свой for цикл. Но это в стороне.

Просто установите total на ноль внутри петли ... Вы все равно должны это сделать. На данный момент он не инициализирован.

Вы должны выйти из цикла, когда lower == upper, не выполняя расчет. См. Предыдущую заметку о моих мыслях о вашем цикле for.

Может быть что-то вроде этого:

printf("Enter lower and upper integer limits: "); 
fflush(stdout); 

while (2 == scanf("%d %d", &lower, &upper) && lower < upper) 
{ 
    total = 0; 

    // Do calculation and output result... 

    printf("Enter the next set of limits: "); 
    fflush(stdout); 
} 

printf("Done\n"); 
+0

Paddy, спасибо за вашу помощь. Знаете ли вы о другом способе делать цикл без использования fflush (stdout), потому что я еще не узнал об этом, но не знаю, как это сделать. – user1992348

+0

Но я понимаю, что моя петля довольно уродливая ... – user1992348

+0

Вот что у меня есть. Я думаю, что это выглядит лучше, но я все еще не могу понять, чтобы программа прекратила работу и произнесла «Готово», когда верхний и нижний ввод совпадают. – user1992348

1
int index, lower, upper, square, total, input; 
while(1) 
{ 
    total = 0; 
    printf("Enter lower and upper integer limits: "); 
    fflush(stdout); 
    input = scanf("%d %d", &lower, &upper); 
    if(input != 2) continue; 
    if(upper <= lower) break; 
    for (index = lower; index <= upper; index++) 
    { 
     square = index * index; 
     total += square; 
    } 
    printf("The sums of the squares from %d to %d is %d\n", lower , upper, total); 
} 
printf("Done\n"); 
+0

Но не следует «if (input! = 2) continue;» be "if (input == 2) continue;"? – user1992348

+0

continue означает запуск следующей итерации цикла. Мы ожидаем 2 ввода. В этом случае мы все равно должны быть в цикле. Любое другое значение является ошибкой, и мы хотим снова запросить наши данные. –

Смежные вопросы