如果输入数字5,此循环必须运行5次,但运行6次。问题是什么?
int main(){
int i, *arr, size;
printf("Please enter the Number: ");
scanf("%d ",&size);
arr = (int*) malloc(size * sizeof(int));
for(i = 0; i < size; i++){
scanf("%d ", &arr[i]);
}
}
答案 0 :(得分:23)
从循环中使用的scanf()
格式字符串中删除尾随空格。
它会导致scanf()在读取int
(%d
)之后丢弃所有空格,直到找到不是空格的内容。在循环的第五次迭代中,scanf()
读取int
,并继续前进,直到找到非空格。这给人一种需要读取一个整数的错觉。
在scanf()
的最后一次调用中,整数数据之后的任何非空白字符都将导致读取结束。
答案 1 :(得分:7)
删除此处的空格:
此:
scanf("%d ",&arr[i]);
^
应该是:
scanf("%d",&arr[i]);
答案 2 :(得分:0)
我也面临类似的问题。为了完美,请删除
循环中%d 之后的空格。它应该工作。可能是scanf
的一些属性。
int main(){
int i, *arr, size;
printf("Please enter the Number: ");
scanf("%d",&size);// Note the change here
arr= (int*) malloc(size * sizeof(int));
for(i= 0;i < size;i++){
scanf("%d",&arr[i]);
}
}