c语言scanf逗号引发乱码问题

scanf 乱码
while (1)
{
    system("cls");
    printf("1:Input person information\n");
    printf("2:Display person information\n");
    printf("3:Exit\n");
    int input;
    scanf("%d", &input);
    system("cls");
    while (input == 1)
    {

        printf("Please input:\nname\ngender\nheight\nweight\n");
        //scanf("%s %s %lf %lf", &name[numPerson], &gender[numPerson], &height[numPerson], &weight[numPerson]);
        scanf("%s,%s,%lf,%lf", &arr[numPerson].name,&arr[numPerson].gender,&arr[numPerson].height,&arr[numPerson].weight);
        /*scanf("%s", &name[numPerson]);
        scanf("%s",&gender[numPerson]);
        scanf("%lf",&height[numPerson]);
        scanf("%lf",&weight[numPerson]);*/
        numPerson++;
        system("cls");
        printf("Keep on input information?\n 1:Yes\n 2:No\n");
        scanf("%d",&choose);
        if (choose == 2)
        {
            break;
        }
    }
    if (input == 2)
    {
     printf("Display input name,gender,height and weight information\n");
     for (int i = 0; i < numPerson;i++)
     {
        //printf("Name:%s\nGender:%s\nHeight:%lf\nWeight:%lf\n", name[i], gender[i], height[i], weight[i]);
         printf("Name:%s\nGender:%s\nHeight:%lf\nWeight:%lf\n", arr[i].name, arr[i].gender, arr[i].height, arr[i].weight);
        putchar('\n');
        
     }
     system("pause");
    }
    else if (input == 3)
        break;
}

img

改为scanf("%s %s %lf %lf", &arr[numPerson].name,&arr[numPerson].gender,&arr[numPerson].height,&arr[numPerson].weight);显示正确
为什么此处scanf用逗号会吧所有输入都给到name这一部分?

%s不是字符串的占位符吗,用逗号是不符合规范的,scanf里每出现一个占位符,后面就要跟一个变量的引用

分开写吧,scanf会涉及到缓冲区问题,实际当中也没你这么写的,尽量分成多个语句减少问题

要收scanf的返回值的吧,int ret=scanf......,应该就好了吧


可以看下c语言参考手册中的 c语言-scanf()