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价值.这是为什么?
首先,转变string到char在的声明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不是它的值.同时从字符串中删除&符号scanf并printf调用:
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)