为什么我不能scanf和printf整数?

joh*_*880 0 c c++ printf user-input scanf

#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <sstream>

using namespace std;

struct person
{
    int age;
    string name[20], dob[20], pob[20], gender[7];
};

int main ()
{
    person person[10];
    cout << "Please enter your name, date of birth, place of birth, gender, and age, separated by a space.\nFor example, John 1/15/1994 Maine Male 20: ";
    scanf("%s %s %s %s %d", &person[0].name, &person[0].dob, &person[0].pob, &person[0].gender, &person[0].age);
    printf("%s %s %s %s %d", &person[0].name, &person[0].dob, &person[0].pob, &person[0].gender, &person[0].age);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我尝试扫描并打印用户的年龄,但它给了我2749536的person.age价值.这是为什么?

das*_*ght 5

首先,转变stringchar在的声明person:

struct person
{
    int age;
    char name[20], dob[20], pob[20], gender[7];
//  ^^^^
};
Run Code Online (Sandbox Code Playgroud)

然后你需要从&person[0].age调用中删除&符号printf,因为你传递的是地址,而int不是它的值.同时从字符串中删除&符号scanfprintf调用:

scanf("%s %s %s %s %d", person[0].name, person[0].dob, person[0].pob, person[0].gender, &person[0].age);
// Only one ampersand is needed above: -------------------------------------------------^
printf("%s %s %s %s %d", person[0].name, person[0].dob, person[0].pob, person[0].gender, person[0].age);
Run Code Online (Sandbox Code Playgroud)

演示.