2015-03-04 3 views
1

Я начал изучать C 3 недели назад и во время обучения while loops Я попытался создать программу добавления, в основном вы продолжаете добавлять числа, которые она добавляет, и после второго номера она дает вам промежуточный итог для каждого добавления , и если вы нажмете 0, чтобы выйти, он дает окончательную сумму, затем завершает работу. Теперь у меня есть один главный, еще один вопрос. Главный вопрос: мне пришлось использовать sum = 0 перед функциями while, если я использую его после «времени», он дает мне номер, который я ввел в качестве результата. Теперь я действительно задаюсь вопросом, какова идея этого. Когда я пишу его, как показано ниже, он приравнивает «sum to 0» к началу и меняет значение при вводе другого номера, или за этим стоит другая идея.Удивление во время цикла

И еще вопрос: зачем мне использовать 2 getchar();, чтобы моя программа оставалась на экране, почему бы и нет?

#include <stdio.h> 
int main(void) 
{ 
    float num; 
    float sum; 
    printf(" please enter a number +0 to start the program (0 to quit): \n"); 
    scanf(" %f", &num); 

    sum =0; //THIS HERE********************** 

    while (num > 0) 
    { 
     printf("please enter integer:\n"); 
     scanf("%f", &num); 
     sum = sum + num; 
     printf("current sum is = %f\n", sum); 
    } 
    printf("final sum is = %f\n", sum); 
    getchar(); 
    getchar(); 
    return 0; 
} 

ответ

1

Если я использую его после while это дает мне номер, я вошел в качестве результата.

Это происходит потому, что когда вы делаете это

while (num > 0) { 
    sum = 0; 
    ... 
    sum = sum + num; 
} 

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

почему мне нужно использовать 2 getchar();

Потому что, когда scanf потребляет последний номер конечный пользователь вошел, он читает все, вплоть до, но не включая, '\n' характер, что соответствует на Введите ключ. Этот символ '\n' остается в буфере, ожидая, что ваша программа будет использована. Первый звонок getchar() потребляет это «затяжное» '\n', а второе - на экране, пока вы не нажмете клавишу «Ввод» еще раз.

5

Если поместить sum=0 внутри цикла while будет вызываться каждый раз, когда петли в то время как цикл.

Это означает, что когда вы достигнете sum=sum+num, вы фактически будете рассчитывать sum=0+num.

У вас есть два вызова getchar(), потому что первый всасывает дополнительный символ, который не был поглощен вашим scanf. Вероятно, этот символ является символом новой строки, поэтому вы не можете его увидеть. Второй getchar() затем держит ваш терминал открытым, потому что он ждет символа.

Чтобы выяснить, если моя гипотеза верна о первом getchar() вы могли бы попробовать это:

char temp = getchar(); 
printf("%d",(int)temp); //Print out the character number from the first getchar 
getchar(); //This keeps the window open 
1

= в большинстве языков программирования отличается от математического =.Это не означает, что обе стороны будут постоянно равны друг другу; скорее, это означает, что правая часть должна быть вычислена и что результат должен быть присвоен переменной с левой стороны. Позже другая строка может изменить значение переменной на что-то другое.

Таким образом, sum = sum + num; означает, что текущие значения sum и num и должны быть добавлены, и результат должен быть введен обратно в sum. Для того, чтобы это работало так, как вам угодно, sum должно быть 0 при первом запуске этой строки; следовательно, вам нужно sum = 0;. Однако, если эта строка находится внутри цикла, она повторно выполняется, так что результат предыдущего суммирования исчезает и заменяется на 0 перед каждым новым номером.

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