for
循环应仅迭代5次,但第一个for
循环应迭代6次,但秒在相同条件下可以正常工作。
int i, j, n = 5;
int *p;
printf("enter size of array=");
scanf("%d", &n);
p = (int *)calloc(sizeof(int), n);
printf("enter array\n");
for (i = 0; i < n; i++) {
scanf("%d ", (p + i));
}
printf("array\n");
for (j = 0; j < n; j++) {
printf("%d ", *(p + j));
}
free(p);
答案 0 :(得分:0)
两个循环的迭代次数取决于在提示enter size of array=
上输入的第一个数字。
您应该更具防御性:拒绝无效输入并检测错误。
这是修改后的版本:
#include <stdio.h>
#include <stdlib.h>
int main() {
int i, n;
int *p;
printf("Enter array size: ");
if (scanf("%d", &n) != 1 || n <= 0) {
printf("invalid input\n");
return 1;
}
p = (int *)calloc(sizeof(int), n);
if (p == NULL) {
printf("allocation failure\n");
return 1;
}
printf("enter array\n");
for (i = 0; i < n; i++) {
if (scanf("%d ", (p + i)) != 1) {
printf("invalid input\n");
return 1;
}
}
printf("array\n");
for (i = 0; i < n; i++) {
printf("%d ", *(p + i));
}
printf("\n");
free(p);
return 0;
}
答案 1 :(得分:0)
嘿@harsh,您在指针的观点上没有犯错。 但是问题是由scanf引起的。
因为您在%d之后提供了'_'(空格)(scanf(“%d”,(p + i))); 那么scanf将在每次出现提供的值之后始终查找一个空格(或任何空格字符),并重复搜索一次,因此最后一次将运行一次。
只需删除该空间,它将起作用。 希望这会有所帮助。
答案 2 :(得分:0)
做
scanf ("%d", (p+i))
即,不要在%d之后留空格
calloc的语法也应该
p =(int *)calloc(n,sizeof(int));