2013-11-09 3 views
3

Я пытаюсь создать программу, которая позволяет пользователю вводить числа (максимальные записи> 10^6) до тех пор, пока не встретится отрицательный результат. Я пробовал много версии, но они либо не регистрируют, что введено отрицательное значение, либо они сбой.Добавление чисел до тех пор, пока не встретится отрицательный результат.

Это где я в настоящее время:

#include <stdio.h> 

#define HIGHEST 999999 
int main(){ 
    int i=0, entry, sum=0; 
     while(i<HIGHEST){ 
      scanf("%i", entry); 
      if(entry>0){ 
       sum+=entry; 
      } 
      else{ 
      i=HIGHEST; 
      } 
     i++; 
    } 
    printf("Sum: %i", sum); 
    system("pause"); 
} 

ответ

3

Ваша проблема находится на этой линии:

scanf("%i", entry); 

Что должно быть:

scanf("%i", &entry); 

Вам необходимо пройти в адрес целочисленной переменной, которая будет хранить отсканированное значение. Поскольку запись никогда не была инициализирована, она просто заполнена мусором/все, что находится в памяти, а не введенное значение. Смотрите это reference, в котором говорится,

"Depending on the format string, the function may expect a sequence of additional arguments,  
    each containing a pointer to allocated storage where the interpretation of the extracted 
    characters is stored with the appropriate type" 
+1

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

+0

Спасибо, тон, не должен был пропустить это :) – user2962716

0

Вы обеспечиваете способ уйти, если введенный номер слишком велик:

while(i<HIGHEST){ 

Но ничего уйти, если она меньше 0; Попробуйте это:

while((i<HIGHEST)&&(i>=0)){ 

Кроме того, @OldProgrammer правильно, ваш scanf() должен быть, как он указал.

+0

Нужно ли это делать, даже если нет ничего, что могло бы сделать i <0? – user2962716

+0

@ user2962716 - В описании вашей проблемы: _until встречается отрицательный ._, вы подразумеваете, что программа должна работать до тех пор, пока не встретится отрицательный результат (и меньше 1000000). Поэтому я предложил это предложение :) – ryyker

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