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++)
我用 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++)