我的代码中有一个问题,它没有使用带空格的完整字符串 #包括 #包括 结构战斗机 { 字符*名称,*类别; 体重、年龄; }; 无效输入_数据(结构*f,整数n); 无效显示(结构战斗机*f,整数n); int main(int argc,char const*argv[] { int n; 结构战斗机*f; printf(“输入战斗机编号:”;scanf(“%d”和“&n”); f=(结构战斗机*)malloc(n*sizeof(结构战斗机)); 输入_数据(f,n); 显示(f,n); 返回0; for(int i=0;iname); 免费((f+i)->类别); } 免费(f); } 无效输入数据(结构*f,整数n){ 对于(int i=0;iname=(char*)malloc(40*sizeof(char)); (f+i)->类别=(char*)malloc(40*sizeof(char)); fflush(stdin); printf(“输入战斗机名称:”); scanf(“%s[^\n]”,(f+i)->名称); //全名不起作用,当我试图用空格(约翰·特朗普)来命名全名时(约翰·特朗普)不起作用,但当我只用名字(约翰)时(约翰·特朗普)很好。。。 fflush(stdin); printf(“进入战斗机时代:”); scanf(“%d”和((f+i)->年龄); printf(“输入战斗机重量:”); scanf(“%d”和(f+i)->重量); printf(“输入战斗机类别:”); scanf(“%s[^\n]”,(f+i)->类别); } } 无效显示(结构战斗机*f,整数n){ for(int i=0;iname); printf(“战斗机时代:”); printf(“%d\n”,(f+i)->年龄); printf(“战斗机重量:”); printf(“%d\n”,(f+i)->重量); printf(“战斗机类别:”); 看跌期权((f+i)->类别); } }

我的代码中有一个问题,它没有使用带空格的完整字符串 #包括 #包括 结构战斗机 { 字符*名称,*类别; 体重、年龄; }; 无效输入_数据(结构*f,整数n); 无效显示(结构战斗机*f,整数n); int main(int argc,char const*argv[] { int n; 结构战斗机*f; printf(“输入战斗机编号:”;scanf(“%d”和“&n”); f=(结构战斗机*)malloc(n*sizeof(结构战斗机)); 输入_数据(f,n); 显示(f,n); 返回0; for(int i=0;iname); 免费((f+i)->类别); } 免费(f); } 无效输入数据(结构*f,整数n){ 对于(int i=0;iname=(char*)malloc(40*sizeof(char)); (f+i)->类别=(char*)malloc(40*sizeof(char)); fflush(stdin); printf(“输入战斗机名称:”); scanf(“%s[^\n]”,(f+i)->名称); //全名不起作用,当我试图用空格(约翰·特朗普)来命名全名时(约翰·特朗普)不起作用,但当我只用名字(约翰)时(约翰·特朗普)很好。。。 fflush(stdin); printf(“进入战斗机时代:”); scanf(“%d”和((f+i)->年龄); printf(“输入战斗机重量:”); scanf(“%d”和(f+i)->重量); printf(“输入战斗机类别:”); scanf(“%s[^\n]”,(f+i)->类别); } } 无效显示(结构战斗机*f,整数n){ for(int i=0;iname); printf(“战斗机时代:”); printf(“%d\n”,(f+i)->年龄); printf(“战斗机重量:”); printf(“%d\n”,(f+i)->重量); printf(“战斗机类别:”); 看跌期权((f+i)->类别); } },c,scanf,C,Scanf,请参见输入数据()函数中的我已对我的问题发表了评论 当我用空格表示全名时,它不会占用剩下的部分 输入并直接跳转到循环的下一个迭代 给第一个名字或者没有空格的名字,这样就可以了 请参见 此外,您的返回0 应该在释放资源的循环之后。“< /> >“%s[^ \n]”< /代码>您可能需要“ %[^ \n]”< /C> >。我鼓励您考虑。但是,如果您要使用ScFF(…),如果您期望嵌入的字符串…那么您的语法不正确。这里有一个备选方案: SCANF(“%[^\n]%*c”,str):你是对的。但你可能

请参见输入数据()函数中的我已对我的问题发表了评论

当我用空格表示全名时,它不会占用剩下的部分 输入并直接跳转到循环的下一个迭代 给第一个名字或者没有空格的名字,这样就可以了

请参见


此外,您的<代码>返回0 应该在释放资源的循环之后。“< /> >“%s[^ \n]”< /代码>您可能需要“<代码> %[^ \n]”< /C> >。我鼓励您考虑。但是,如果您要使用ScFF(…),如果您期望嵌入的字符串…那么您的语法不正确。这里有一个备选方案:<代码> SCANF(“%[^\n]%*c”,str):你是对的。但你可能应该投票“关闭/复制”:(我还能这样做吗?仍然不工作……事实上,当我使用scanf(“%[^\n]%*c”,(f+I)->name)时,这不是要求输入的事件。如果你读了发布的答案,最好不要使用scanf,使用

(f+I)->name=(char*)malloc(40*sizeof)(char);fgets((f+i)->名称,40,标准格式);
#include <stdio.h>
#include <stdlib.h>

struct fighter
{
    char *name, *category;
    int weight, age;
};

void enter_data(struct fighter *f, int n);
void display(struct fighter *f, int n);

int main(int argc, char const *argv[])
{
    int n;
    struct fighter *f;

    printf("Enter no. of fighter: "); scanf("%d",&n);

    f = (struct fighter *)malloc(n*sizeof(struct fighter));

    enter_data(f, n);
    display(f, n);
    return 0;


    for(int i=0; i<n; i++){
        free((f+i)->name);
        free((f+i)->category);
    }
    free(f);
}

void enter_data(struct fighter *f, int n){
    for(int i=0; i<n; i++){

        (f+i)->name=(char *)malloc(40*sizeof(char));
        (f+i)->category=(char *)malloc(40*sizeof(char));

        fflush(stdin);
        printf("Enter name of fighter: "); 
        scanf("%s[^\n]",(f+i)->name);
        //its not working full name, when I'm trying to give full name with space (ie. John Trump) its not working but when I'm giving only first name (ie. John) its working fine...

        fflush(stdin);
        printf("Enter age of fighter: ");  
        scanf("%d",&((f+i)->age));
        printf("Enter weight of fighter: ");  
        scanf("%d",&(f+i)->weight);
        printf("Enter category of fighter: "); 
        scanf("%s[^\n]",(f+i)->category);
    }
}

void display(struct fighter *f, int n){

    for(int i=0; i<n; i++){
        printf("\n\n");
        printf(" Name of fighter: "); 
        puts((f+i)->name);
        printf(" Age of fighter: ");  
        printf("%d \n",(f+i)->age);
        printf(" Weight of fighter: ");   
        printf("%d \n",(f+i)->weight);
        printf(" Category of fighter: "); 
        puts((f+i)->category);
    }
}