【问题标题】:Why does sleep() cause a new line?为什么 sleep() 会导致换行?
【发布时间】:2019-11-16 21:43:07
【问题描述】:
#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;
}

我很好奇为什么如果你取消注释 usleep(9000) 会打印额外的换行符而不是 sleep(1)。

【问题讨论】:

  • 这不是 sleep 做的 - 是同步。
  • 为什么你认为是睡眠造成的?有时temp % 7 会是0
  • Here's my output 带有注释的行和换行符仍在其中。
  • @TedLyngmo 与什么同步?
  • @TedLyngmo Barefoot Merlot 会给你带来好处 :)

标签: c++ operating-system


【解决方案1】:

这与睡觉无关。

rand()返回一个可被7整除的值时,mod的值为0。

for 循环未执行,但循环后仍在输出新的换行符。

std::cout<<"\n";

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

#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;
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 2014-06-05
    • 2021-12-18
    • 2014-04-11
    相关资源
    最近更新 更多