我是C ++的新手,目前正在学习函数。我很难使此代码正常工作。我在<cstdio>
库中使用C ++,因为我的老师希望我使用C ++。漏洞是使用<cstdio>
,因此代码是:
#include <iostream>
#include <cstdio>
void letters(char name[], char discipline[])
{
printf("type a name:\n\n");
scanf("%s", &name);
printf("\n\ntype a discipline:\n\n");
scanf("%s", &discipline);
printf("\n\nname: %s\n\ndiscipline: %s", name, discipline);
}
void calcsum(int point1, int point2, int sum)
{
printf("\n\ntype a point:\n\n");
scanf("%i", &point1);
printf("\n\ntype a second point:\n\n");
scanf("%i", &point2);
sum = point1 + point2;
printf("\n\nsum is: %i", sum);
}
int main(int argc, char** argv)
{
char name[100];
char discipline[100];
int point1, point2, sum;
letters(name, discipline);
calcsum(point1, point2,sum);
return 0;
}
一切正常,直到要求键入该学科为止。当我键入内容时,要求输入名称,然后出现一个错误选项卡。对于我涉及所有其他数据类型的char
数组的所有代码,都是这样。
答案 0 :(得分:0)
漏洞是使用
comments
我不确定您的老师是否会喜欢您的选择,但是您没有要求。
在
<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()
最后但并非最不重要的一点是,C ++标准库的所有功能都位于命名空间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
实际上应该是
printf( /* ... */ );
scanf( /* ... */ );
// etc