gpt4 book ai didi

c - 为什么 getchar() 在二维数组中存储重复值?

转载 作者:行者123 更新时间:2023-11-30 16:13:14 25 4
gpt4 key购买 nike

所以基本上我试图在每一行的第六个位置存储一个字符,并且我已经成功了,但是我在所需位置及其后续位置中存储了两次相同的值。

我不知道出了什么问题。

  • 我尝试过使用 while ((getchar()) != '\n'); <-- 没有帮助
  • 将 getchar() 放在 scanf 之前
  • 最后,scanf之后的getchar()至少允许我输入值,上面两个只是打印空数组

编辑1- 将列从 5 更改为 6,因为“chux”表示先前的值导致外部分配。编辑2- 向下滚动查看工作代码和最后一个错误

    char *arr_input(int limit){
char *p=(char*)malloc(limit*6*sizeof(char)); // Edit 1
int i=0,j;
//while ((getchar()) != '\n');
while(i<limit){
getchar();
scanf("%c",&p[i*5+5]);

i++;
}

arr_display(p,limit);
return p;
}
Value at row 0 is = 
Value at row 0 is =
Value at row 0 is =
Value at row 0 is =
Value at row 0 is =
Value at row 0 is = 1
Value at row 1 is = 1
Value at row 1 is =
Value at row 1 is =
Value at row 1 is =
Value at row 1 is =
Value at row 1 is = 2
Value at row 2 is = 2
Value at row 2 is =
Value at row 2 is =
Value at row 2 is =
Value at row 2 is =
Value at row 2 is = 3
Input Verified

使用 calloc() 声明时的输出

Value at row 0 is = 0
Value at row 0 is =
Value at row 0 is =
Value at row 0 is =
Value at row 0 is =
Value at row 0 is = 1
Value at row 1 is =
Value at row 1 is = 0
Value at row 1 is =
Value at row 1 is =
Value at row 1 is =
Value at row 1 is = 2
Value at row 2 is =
Value at row 2 is =
Value at row 2 is = 0
Value at row 2 is =
Value at row 2 is =
Value at row 2 is = 3

除了 calloc() 之外的工作代码没有初始化 0 值,所以我手动初始化了

    char *arr_input(int limit){
char *p=(char*)calloc(limit*6,sizeof(char));
int i=0;
while(i<limit){
scanf(" %c",&p[i*6+5]);
i++;
}
zeroIn(p,limit);
arr_display(p,limit);
return p;
}
void *zeroIn(char *p ,int limit){
int i=0,j=0;
for(i=0;i<limit;i++){
for(j=0;j<5;j++)
p[i*6+j]='0';
}
//arr_display(p,limit);
}
char *arr_display(char *disp,int size){
int i=0,j=0;
for (i = 0; i <size ;i++)
{
for(j=0;j<6;j++){
printf("Value at row %d is = %c\n",i,disp[i*6+j]);
}
}
}
Value at row 0 is = 0
Value at row 0 is = 0
Value at row 0 is = 0
Value at row 0 is = 0
Value at row 0 is = 0
Value at row 0 is = 1
Value at row 1 is = 0
Value at row 1 is = 0
Value at row 1 is = 0
Value at row 1 is = 0
Value at row 1 is = 0
Value at row 1 is = 2
Value at row 2 is = 0
Value at row 2 is = 0
Value at row 2 is = 0
Value at row 2 is = 0
Value at row 2 is = 0
Value at row 2 is = 3

最佳答案

使用calloc代替malloc。这样内存就会被初始化为零。

请不要忘记将分配大小(即 6)和索引计算更新为相同的数字。您分配了 6,但使用了 &p[i*5+5]。

粘贴了两个更改,

char *p=(char*)calloc(limit*6, sizeof(char)); 
scanf("%c",&p[i*6+5]);

关于c - 为什么 getchar() 在二维数组中存储重复值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58099053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com