Лазейка должна была использовать <cstdio>
Я не уверен, что ваш учитель будет любить ваш выбор, но вы не просили об этом.
В
printf("type a name:\n\n");
scanf("%s", &name);
printf("\n\ntype a discipline:\n\n");
scanf("%s", &discipline);
name
и discipline
уже указатели, вам не нужно использовать оператор адреса &
на них, когда они передаютсяscanf()
.
Кроме того, нет причин для передачи параметров вашим функциям calcsum()
и letters()
, поскольку вы не хотите передавать какие-либо данные.Просто определите переменные, которые они используют внутри функций:
void letters()
{
printf("type a name:\n\n");
char name[100];
scanf("%99s", &name); // read 99 characters + terminating '\0' max
printf("\n\ntype a discipline:\n\n");
char discipline[100];
scanf("%99s", &discipline); // NEVER use "%s" with scanf without specifying
// a maximum width for field to read.
printf("\n\nname: %s\n\ndiscipline: %s", name, discipline);
}
void calcsum()
{
printf("\n\ntype a point:\n\n");
int point1;
scanf("%i", &point1);
printf("\n\ntype a second point:\n\n");
int point2;
scanf("%i", &point2);
int sum = point1 + point2;
printf("\n\nsum is: %i", sum);
}
int main() // there is also no need of taking parameters if you don't use them
{
letters(); // no parameters needed since you don't
calcsum(); // want to pass values to these functions
// return 0; main defaults to return 0 if there is no return-statement.
}
Последнее, но не менее важное, следует отметить, что все функции стандартной библиотеки C ++ находятся в пространстве имен std
(или ниже).Это касается и унаследованных функций из стандартной библиотеки c.Так что
printf( /* ... */ );
scanf( /* ... */ );
// etc
на самом деле должно быть
std::printf( /* ... */ );
std::scanf( /* ... */ );