函数中的字符串和整数

时间:2018-11-21 12:52:23

标签: c++ function

我是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数组的所有代码,都是这样。

1 个答案:

答案 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