C 用户输入被跳过

C user input getting skipped

我用 C 编写了一个代码,它利用动态内存分配,但我的输入在第二次迭代后被跳过。

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

int main() {
    int n;
    printf("Enter the number of users :");
    scanf("%d", &n);
    // char **array = malloc(n * sizeof(char *));
    char flag[4];
    for(int i=0;i<n;i++) {
        printf("Does user have middle name? (yes/no) :");
        scanf("%s", flag);
        if (strcmp("yes", flag)==0) {
            char **array = malloc(3 * sizeof(char *));
            for(int j=0;j<3;j++)
                array[i] = (char *)malloc(9);
            printf("First name :");
            scanf("%s", array[0]);
            printf("Middle name :");
            scanf("%s", array[1]);
            printf("Last name :");
            scanf("%s", array[2]);
            for(int i=0;i<3;i++) 
                free(array[i]);
            free(array);
        }
        else {
            char **array = malloc(2 * sizeof(char *));
            for(int j=0;j<2;j++)
                array[i] = (char *)malloc(9);
            printf("First name :");
            scanf("%s", array[0]);
            printf("Last name :");
            scanf("%s", array[1]);
            for(int i=0;i<2;i++) 
                free(array[i]);
            free(array);
        }
    }

    
}

在这里,假设我给 n=3 并输入“是”。它输入名字、中间名和姓氏,然后跳过下一个“Does it have a middle name”。为什么会这样??

问题出在这里:

for(int j=0;j<3;j++)
    array[i] = (char *)malloc(9);

您想使用索引 j,而不是 i:

for(int j=0;j<3;j++)
    array[j] = malloc(9); // Don't cast malloc

你在内循环中也跟踪 i

for(int i=0;i<n;i++) {
    ...
    for(int i=0;i<3;i++)