C++ Linux system()与printf()结合使用很奇怪;

Jer*_*ers 1 c++ linux cpu printf system

我希望在Linux上用C++获取CPU的名称和时钟速度.但到目前为止,它对我来说效果不佳.现在我正在使用这段代码:

printf("\033[1;32m[ OK ]\033[0m Initializing...\n");
printf("\033[1m[INFO]\033[0m CPU name: ");
system("grep -i --color 'model name' /proc/cpuinfo | uniq | sed -e 's/model name//' |    sed -e 's/: //' | sed -e 's/          //' | sed -e 's/@.*//'");
printf("\n");
printf("\033[1m[INFO]\033[0m CPU speed: ");
system("grep -i --color 'model name' /proc/cpuinfo | uniq | sed -e 's/.*@//'");
printf("\n");
Run Code Online (Sandbox Code Playgroud)

现在,所需的输出应该是(在我的机器上)这样的东西:

[ OK ] Initializing...
[INFO] CPU name: Intel(R) Xeon(R) CPU X5365  
[INFO] CPU speed: 3.00GHz
Run Code Online (Sandbox Code Playgroud)

但这不是它给我的东西.它给出了这种奇怪的结构:

[ OK ] Initializing...
     Intel(R) Xeon(R) CPU X5365  
[INFO] CPU name: 
 3.00GHz
[INFO] CPU speed:
Run Code Online (Sandbox Code Playgroud)

有谁知道该怎么办?无论如何,Tnx.

Mat*_*Mat 6

您需要在调用之前刷新输出流system,否则可以缓冲打印出的字符串.打印\n刷新(假设stdout是行缓冲,如果您正在写入终端,通常就是这种情况),但打印不带刷新的行不一定要刷新.

尝试添加:

fflush(stdout);
Run Code Online (Sandbox Code Playgroud)

在你的system电话之前.

(fflush<cstdio>.)