运行 scanf 时间错误

Run time Error with scanf

我是编程新手。我试图实现一个示例程序,但它给了我一个 运行 时间 error.but 高度 属性 是一个浮点型。

format ‘%f’ expects argument of type ‘float *’, but argument 2 has type ‘double’

#include<stdio.h>
#include<string.h>

struct user
{
    char name[30];
    float height;
    /*float weight;
    int age;
    char hand[9];
    char position[10];
    char expectation[10];*/
};

struct user get_user_data()
{
    struct user u;
    printf("\nEnter your name: ");
    scanf("%c", u.name);

    printf("\nEnter your height: ");
    scanf("%f", u.height);

    return u;

};
int height_ratings(struct user u)
{
  int heightrt = 0;

    if (u.height > 70)
    {
       heightrt =70/10;

    }
    return heightrt;
};

int main(int argc, char* argv[])
{

    struct  user user1 = get_user_data();

    int heighRate = height_ratings(user1);

    printf("your height is  ", heighRate);

    return 0;

}

您的 scanf() 调用存在格式不匹配问题:

  1. scanf("%c", u.name); 应该是 scanf("%s", u.name);

%s 用于扫描 string%c 用于扫描 char.

  1. scanf("%f", u.height); 应该是 scanf("%f", &u.height);

注意添加的 &。您需要传递float变量的地址。

Oppss..你可能想试试这个

struct user *get_user_data()
{
   /* you have to use dynamic allocation if you want to return it
      (don't forget to free) */
   struct user *u = (struct user *)malloc(sizeof(struct user));
   printf("\nEnter your name: ");
   /* use %s for string instead of %c */
   scanf("%s", u.name);

   printf("\nEnter your height: ");
   /* don't forget to use & (reference operator) */
   scanf("%f", &u.height);

   return u;
};