2015-07-07 6 views
0

Я работаю над этим некоторое время и не могу понять это. То, что это должно сделать, - это определить стоимость автострахования для каждого члена семьи в зависимости от их возраста. Что мне нужно сделать, так это передать функцию AgeAdd, возраст членов семьи и, возможно, подсчитать (чтобы отслеживать, какой член является), и он рассчитает стоимость и распечатает ее для меня.Программа перестает работать сперва scanf

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
#include <ctype.h> 

void AgeAdd(int); 

int main() 
{ 

int age, i, o, count; 
count = 1; 
printf("Enter the number of family members: "); 
scanf("%d", o); 

for (i = 0; i < o; i++) 
{ 

    printf("Enter the age for family member %d: ", count); 

    scanf("%d", &age); \\program crashes here 

    AgeAdd(age); 

    count++; 
} 



return 0; 


} 

когда я достигаю, что первый scanf программа перестает работать, я запутался, почему. Можно ли вместо этого использовать getchar?

void AgeAdd(int a) 
{ 
int sum1, sum2, sum3; 


if (a >= 16 && a <= 19) 
{ 
    sum1 = 1000 + (1000 * 15/100); 
    printf("The cost for the family member is %d \n", sum1); 

} 
if (a >= 20 && a <= 24) 
{ 
    sum2 = 1000 + (1000 * 5/100); 
    printf("The cost for the family member is %d \n", sum2); 

} 
if (a >= 25) 
{ 
    sum3 = 1000 - (1000 * 5/100); 
    printf("The cost for the family member is %d \n", sum3); 
} 


} 

Вот AgeAdd метод, но я сомневаюсь, что есть большая проблема здесь.

+2

Определить «перестает работать»? Это крушение? Извлечь данные о мусоре? Делает ничего и просто сидит там? –

+2

Почему 'scanf ("% d ", o);' должен быть 'scanf ("% d ", &o);' – maskacovnik

+3

В '' сканировать '' '' '' '' '' '' 'o'' –

ответ

2

Закрепить свой первый scanf вызов (вы должны передать указатель):

scanf("%d", &o);

Поместите пространство между последующими scanf вызовов:

scanf(" %d", &age);

Это проходит над символом новой строки введенный на предыдущей итерации.

+0

Спасибо, он больше не сбой. Мне просто нужно выяснить, почему его печать дважды сейчас , но это должно быть легко. Еще раз спасибо –

+0

«Поместить пробел между последующими вызовами scanf» неверно. Это правда, что пространство в формате «передает символ новой строки, введенный на предыдущей итерации», но так ''% d "'. Пространство вообще не требуется. "Входные символы пробела (как указано в функции isspace) пропускаются, если спецификация не включает спецификатор [, c, или n] C11dr §7.21. 6.2 8 – chux

+0

Я согласен, хотя, в конце концов, профессиональные программисты c realis e недостатки функций stdlib i/o и написать их собственные. – Bathsheba

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