为什么sleep()导致换行?

0 c++ operating-system

#include <stdio.h>
#include <cstdlib>
#include <iostream>
#include <unistd.h>
int main(){
    while(1){
        int temp = rand();
        int mod = temp % 7;
        for(int i=0; i<mod; i++){
            std::cout<<temp<<" ";
        }
        std::cout<<"\n";
        //usleep(90000);
        sleep(1);
    }
    return 0;
}

Run Code Online (Sandbox Code Playgroud)

我很好奇,如果您取消注释usleep(9000),为什么还会打印额外的换行符vs sleep(1)。

这是取消注释usleep(9000)时的输出

Kou*_*sik 9

它与睡眠无关。

rand()返回可除以7的值时,的值为mod0。

for循环不执行,而是一个新的换行符仍然在循环后输出。

std::cout<<"\n";
Run Code Online (Sandbox Code Playgroud)

您可以使用以下代码调试结果:

#include <stdio.h>
#include <cstdlib>
#include <iostream>
#include <unistd.h>
int main(){
    while(1){
        int temp = rand();
        int mod = temp % 7;
        std::cout<<"["<<mod<<"]";
        for(int i=0; i<mod; i++){
            std::cout<<temp<<" ";
        }
        std::cout<<"\n";
        sleep(1);
    }
    return 0;
 }
Run Code Online (Sandbox Code Playgroud)