我用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,然后输入&;yes&;它输入名字,中间名,姓氏,然后跳过下一个"它有中间名吗?"为什么会这样?
问题就在这里:
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++)