Простая программа, которая добавляет номера от пользователя - PullRequest
0 голосов
/ 13 марта 2012

Я пытаюсь написать простую программу, которая использует scanf для ввода 5 чисел от пользователя и сложения их вместе. Вот код, который у меня есть до сих пор ..

  int main()   
    {

    int i;  
    int j=1;  
    int k=1;

            for (i=1; i<= 5; i++)
            {
                  scanf("%d\n", &j);
                  k = k+j;
            }   
            printf("%d\n", k);
    }

Но вот что происходит, когда я запускаю программу:

1  
2  
3  
4  
5  
5  
16

По сути, он запрашивает у меня шестое число (очевидно, мне просто нужно 5), а также добавляет один к окончательному результату. (1 + 2 + 3 + 4 + 5 = 15).

Любые мысли по этому поводу. Я где-то совершаю простую ошибку?

Ответы [ 5 ]

1 голос
/ 13 марта 2012

Как уже говорили другие, вы неправильно инициализируете k, но я подозреваю, что причиной вашей проблемы является то, что вы используете scanf("%d\n", &j); вместо scanf("%d", &j);.scanf() игнорирует пробелы, ведущие к матчу.

1 голос
/ 13 марта 2012

Первоначально k = 1. Затем вы добавляете числа 1, 2, 3, 4, 5. Всего они составляют до 1+1+2+3+4+5, что составляет 16.

Обычно вы должны подумать об инициализации переменных.

  • i не нужно инициализировать перед циклом for.
  • j не нужно инициализировать, так как он будет считан с входа.
  • k необходимо правильно инициализировать. Но так как у него есть определенная цель, лучше назвать его sum, чем k. И когда вы подводите итоги, вы должны начать с 0.

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

if (scanf("%d", &j) == 1) {
  sum += j;
} else {
  fprintf(stderr, "Invalid input.\n");
  break; /* exit the for loop. */
}
1 голос
/ 13 марта 2012

Вы, кажется, инициализируете k (то есть число, в котором храните свою сумму) как единое целое, а затем добавляете все остальные числа к нему.Попробуйте это:

int k = 0;

.

Затем, когда вы делаете k = k + j

в первый раз, k будет 0, а не 1. Вам также не нужно делать j = 1.

Тем не менее, вы также можете использовать ярлык для k = k + j;

k += j;

Программисты C должны делать этот шаблон настолько, что они специально для него встроили ярлык в язык.

В вашем цикле for в C принято начинать с нуля и работать до <вашего максимального числа: </p>

for (i = 0; i < 5; i++)

Я не уверен, почему он запрашивает дополнительное время,но попробуйте установить свой цикл так и посмотреть, работает ли он.

0 голосов
/ 14 марта 2012

Символ '\ n' не нужен.Я подозреваю, что вы смешиваете синтаксис printf и scanf: P

0 голосов
/ 13 марта 2012

Это то, что вы хотите, k инициализируется в 0 и выполняет ввод в scanf без \ n, который является конечной строкой:

int main() {
    int i;  
    int j=0;  
    int k=0;
    for (i=1; i<= 5; i++){
        scanf("%d", &j);
        k = k+j;
    }   
    printf("%d\n", k);
}
...