printf中\n的重要作用

 今天在程序运行中发现了一个小bug,对我来说是个难以置信的东西

以下是程序出错的一部分

void FindInfo(STU *s[])
{
    int i;
    char *name;

    name = (char *)malloc(sizeof(char) * 32);

    printf("Please input the name you want to find:\n");

    scanf("%s", name);

    for(i = 0; i < person; i++)
    {
        if(strcmp(s[i]->name, name) == 0)
        {
            printf("  name  age  ");
			printf("%d  %s ", s[i]->name, s[i]->age);
			sleep(3);
            break;
        }
    }  
}

运行结果如下

找了好久原因都没找到,后因高人指点得以解惑。在此感谢冬冬大佬。

后来百度了一下\n的作用

printf是以"行"来做缓冲区来刷新stdout的,如果遇到\n会强制立即刷新.否则刷新可能会延迟.因为printf中没有包含\n,内核决定满一行再刷新,而此时程序由于调用accept或recvfrom这类会block的api函数,造成屏幕一直显示不出来,除非收到了tcp连接请求或数据包,系统才会重新决定是否刷新屏幕.

猜你喜欢

转载自blog.csdn.net/qq_42200183/article/details/81347887