C++;Linux系统()与printf()结合输出; 我想在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");

C++;Linux系统()与printf()结合输出; 我想在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");,c++,linux,system,printf,cpu,C++,Linux,System,Printf,Cpu,现在,(在我的机器上)所需的输出应该是这样的: [ OK ] Initializing... [INFO] CPU name: Intel(R) Xeon(R) CPU X5365 [INFO] CPU speed: 3.00GHz 但这不是它给我的。它给出了一个奇怪的结构: [ OK ] Initializing... Intel(R) Xeon(R) CPU X5365 [INFO] CPU name: 3.00GHz [INFO] CPU speed: 有人知道怎

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

[ OK ] Initializing...
[INFO] CPU name: Intel(R) Xeon(R) CPU X5365  
[INFO] CPU speed: 3.00GHz
但这不是它给我的。它给出了一个奇怪的结构:

[ OK ] Initializing...
     Intel(R) Xeon(R) CPU X5365  
[INFO] CPU name: 
 3.00GHz
[INFO] CPU speed:

有人知道怎么处理这个吗?无论如何,Tnx。

在调用
系统之前,需要刷新输出流,否则打印出来的字符串可以被缓冲。打印
\n
会刷新(假设
stdout
是行缓冲的,这通常是在向终端写入时的情况),但是打印没有行缓冲的行不一定会刷新

尝试添加:

fflush(stdout);
在您的
系统
调用之前


fflush
中)

在调用
system
之前,需要刷新输出流,否则打印出来的字符串会被缓冲。打印
\n
会刷新(假设
stdout
是行缓冲的,这通常是在向终端写入时的情况),但是打印没有行缓冲的行不一定会刷新

尝试添加:

fflush(stdout);
在您的
系统
调用之前


fflush
中)

这是系统特别保证的“
\n
刷新”吗?@LucDanton否。特别是,“\n”在不向终端写入时不会刷新流。@LucDanton:它在POSIX中用于行缓冲流()。完全缓冲流只需要在满缓冲区上刷新。它在C标准中(7.19.2流,也是适用于C++的一个比特,甚至),因此它也适用于非POSIX系统。@ HVC:C99在段落中关于流缓冲模式说:“对这些特性的支持是实现定义的……”(7.7.19.3/3),哪个POSIX会重复,因此它实际上可能不会普遍应用于C实现甚至POSIX:(系统是否特别保证了“
\n
刷新”这一点?@LucDanton否。特别是,“\n”不会在您不向终端写入时刷新流。@LucDanton:它在POSIX中用于行缓冲流()完全缓冲流只需要在满缓冲器上刷新。它在C标准中(7.19.2流,也是适用于C++的一个比特,甚至),因此也适用于非POSIX系统。@ HVC:C99在段落中关于流缓冲模式说:“对这些特性的支持是实现定义的……”(7.7.19.3/3)。,这是POSIX重复的,因此它实际上可能并不普遍适用于C实现,甚至可能不适用于POSIX:(也许
popen
可能对您有用。也许
popen
可能对您有用。