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))