循环运行超过C中指定的范围?为什么?

时间:2016-03-03 08:58:46

标签: c loops scanf

如果输入数字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]);
        }
 }

3 个答案:

答案 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]);
        }
    }