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

Mur*_*hna 8 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]);
        }
 }
Run Code Online (Sandbox Code Playgroud)

Pet*_*ter 23

从scanf()循环中使用的格式字符串中删除尾随空格.

它会导致scanf()在读取int(%d)后丢弃所有空格,直到找到不是空格的内容.在循环的第五次迭代中,scanf()读取int并继续运行,直到找到非空白.这给出了需要读取一个整数的错觉.

在最后一次调用时scanf(),整数数据之后的任何非空格字符都将导致读取结束.


Jab*_*cky 7

删除这里的空格:

这个:

 scanf("%d ",&arr[i]);
          ^
Run Code Online (Sandbox Code Playgroud)

应该:

 scanf("%d",&arr[i]);
Run Code Online (Sandbox Code Playgroud)

  • @Muralikrishna格式字符串`*scanf`中的空格字符指示`*scanf`读取并丢弃任意数量的空白字符(如果有的话)**直到第一个非空白字符**.所以,你的`scanf`,在第五次迭代之后,等待一个非空白字符,如上面的粗体部分所示. (2认同)