当前位置 博文首页 > 不负时光可怜人:【scanf】将一串整数,依次左移一个数,且原来

    不负时光可怜人:【scanf】将一串整数,依次左移一个数,且原来

    作者:[db:作者] 时间:2021-06-27 17:35

    0 起因

    //题:将一串整数,依次左移一个数,且原来的第一个数移到最后
    //我的第一遍代码
    #include<stdio.h>
    #define N 100
    int main()
    {
    	int n,i,a[N],t;
    	printf("请输入数字个数:\n");
    	scanf("%d\n",&n);
    	for(i=0;i<n;i++)
    	{
    		scanf("%d ",&a[i]);	
    	}	
    	t=a[0];
    	for(i=0;i<n-1;i++)
    	{
    		a[i]=a[i+1];	
    	}
    	a[i]=t;
    	printf("The result is:\n");
    	for(i=0;i<n;i++)
    		printf("%d ",a[i]);
    	return 0;
    }
    

    运行结果:
    在这里插入图片描述

    存在的问题:

    为什么要多输入一个数,最终结果才可以正常显示,

    原因

    scanf函数的第一个参数指定了后面变量读取的格式,这样写的话会按照 我们在格式化输入函数中的格式。

    scanf("%d ",&a[i]);注意这里是有一个空格的,但是编译时空格或者制表符都会被忽略,所以实际输入的结果1空格2空格3,这时如果缓冲区没有东西scanf就会阻塞在那里,直到用户有输入以至于有时候会遇到再输入一行才能有返回的情况。

    你的程序执行到scanf()时,会从你的缓冲区读东西,如果缓冲区是空的,就阻塞住,等待你从键盘输入。

    1 修改

    将空格省略之后,我们在运行程序检查。

    运行结果如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yx9wBIlr-1602208575690)(C:\Users\wyuan\AppData\Roaming\Typora\typora-user-images\image-20201009095058227.png)]

    总结:

    当我们在编程中使用scanf语句时还是要小心,不然爆出的错误可能一时半会难以理解!