Arrays for循环不会在错误条件下终止

Arrays for循环不会在错误条件下终止,arrays,c,loops,for-loop,Arrays,C,Loops,For Loop,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

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);
inti,j,n=5;
int*p;
printf(“输入数组大小=”);
scanf(“%d”和“&n”);
p=(int*)calloc(sizeof(int),n);
printf(“输入数组\n”);
对于(i=0;i
两个循环的迭代次数由在提示
输入数组大小=
时输入的第一个数字决定

您应该更具防御性:拒绝无效输入并检测错误

以下是修改后的版本:

#包括
#包括
int main(){
inti,n;
int*p;
printf(“输入数组大小:”);

如果(scanf(“%d”,&n)!=1 | | nhey@harsh,您在指针角度上没有犯错误。 但问题是由scanf引起的

正如您在%d之后提供了“u3;”(一个空格)(scanf(“%d”),(p+i)); 然后,scanf将始终在提供值的每次出现后找到一个空格(或任何空格字符),并再次迭代一次以搜索该空格,因此它将在最后一次运行一次

只要把那个空间移走,就行了。 希望这能有所帮助。

即,不要在%d之后提供空格

calloc的语法也应该是

p=(int*)calloc(n,sizeof(int))


为“第五个SnFF值”键入“愚蠢的东西”而不是“42FoBar”之类的东西,有些人建议不要首先使用SCANF。它有点像在沙漠中部绑在死骆驼上。起初听起来很刺激,但很快就变得单调乏味。
,然后使用诸如
strtol
等函数。我们通常不编写
(p+i)
*(p+j)
-编写这些函数的惯用方法是使用数组下标操作符、
&p[i]
p[j]
。您能告诉我为什么不在%d之后在scanf中留出空间吗……。请与我分享me@HarshGour当您执行“%d”时在scanf中,在获取整数后,scanf不会退出,因为在scanf中,您不仅给出了%d,还提供了一个空格。因此,即使按ENTER键,scanf也会等待一些其他值。第一个scanf将等待2个输入。在第一个for循环中,就在scanf之前,写入“printf”(“迭代号%d”,i)。这将显示循环的迭代次数。您将看到第一次(或第0次)扫描将在接受2个输入后退出。
scanf ("%d", (p+i))