有没有办法获得printf彩色输出?
#!/usr/bin/perl
use warnings;
use strict;
use Term::ANSIColor;
printf "%4.4s\n", colored( '0123456789', 'magenta' );
Run Code Online (Sandbox Code Playgroud)
输出:(仅换行)
{
char buf[8];
sprintf(buf,"AAAA%3s","XXXXXXXX");
printf("%s\n",buf);
}
Run Code Online (Sandbox Code Playgroud)
会发生什么?
缓冲区有8个字符空间,只剩下3个空闲字符,但"XXXXXXXX"长度为8个字符.
我在Windows 7上使用Visual Studion 2008进行测试.结果,程序打印出来:AAAXXXXXXX,发生了运行时错误.
我需要连接一些字符串,我需要包含NULL字节.我不想将'\ 0'视为终止字节.我想保存我宝贵的NULL字节!
在代码示例中,如果
char *a = "\0hey\0\0";
Run Code Online (Sandbox Code Playgroud)
我需要以输出"\ 0hey\0\0"的格式printf.
-AUstin
我试图在我的Visual C++项目中使用"printf",但它无法正常工作.使用Lazy Foo的教程,我在我的项目中设置了SDL,但是当我播放它时,printf什么都不做.
#include "SDL.h"
#include <stdio.h>
int main( int argc, char* args[] ) {
printf("Testing");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
The program '[4664] SDL Testing.exe: Native' has exited with code 0 (0x0).
Run Code Online (Sandbox Code Playgroud)
这就是它.可能有什么不对?
我试图以684.5450072点精度打印数字,因为数字被截断(不是舍入)之后684.54.
我用的时候
var = 684.545007;
printf("%.2f\n",var);
Run Code Online (Sandbox Code Playgroud)
它输出684.55,但我想得到的是684.54.
有谁知道我怎么能纠正这个?
请考虑以下几行:
int i;
printf("%d",i);
Run Code Online (Sandbox Code Playgroud)
词法分析器会进入字符串解析%并d作为单独的标记,还是将"%d"解析为一个标记?
我在这里读到有一个序列点:
在与输入/输出转换格式说明符相关联的操作之后.例如,在表达式中
printf("foo %n %d", &a, 42),%n在打印之前评估之后有一个序列点42.
但是,当我运行此代码时:
int your_function(int a, int b) {
return a - b;
}
int main(void) {
int i = 10;
printf("%d - %d - %d\n", i, your_function(++i, ++i), i);
}
Run Code Online (Sandbox Code Playgroud)
而不是我期望得到的:
12 - 0 - 12
这意味着没有为转换格式说明符创建序列点.http://en.wikipedia.org是错误的,还是我只是误解了某些内容,或者在这种情况下gcc是否不合规(顺便提一下Visual Studio 2015会产生相同的意外结果)?
编辑:
我理解,参数your_function的评估顺序和分配给参数的顺序是未定义的.我不是在问我为什么我的中期是0.我在问为什么其他两个术语都是12.
所以我才知道我们可以在main函数中给出两个参数,即"argc"和"argv.但是我无法理解argv在这里是什么:
int main(int argc, char* argv[]);
argv是一个字符数组?还是指向字符的指针数组?无论哪种方式,我正在寻找一种方法来打印出用户传递给该程序的参数.这是我写的代码,但它不是打印argv的.这有什么不对?我想这是我对argv的理解,这使得这段代码不正确.
#include<stdio.h>
int main(int argc, char *argv[])
{
int i;
printf("%d\n",argc);
for(i=0;i<argc-1;i++)
{
printf("%s",*argv[i]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
根据我从答案得到的建议后,我更正了我的代码如下.
#include<stdio.h>
int main(int argc, char *argv[])
{
int i;
printf("%d\n",argc);
for(i=1;i<argc;i++)
{
printf("%s",argv[i]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在Windows 8.1上使用VMWare中的Ubuntu Linux.这是我得到的输出.它只是打印argc,之后什么都没有.有什么问题?这是我在Linux终端中编译它的方式吗?
在上图中,我希望再次打印数字2,4,5,3,但它们不会被打印出来.
谢谢.
这是一个perl脚本:
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
my @numbers = qw(
0.254
0.255
0.256
);
foreach my $number (@numbers) {
my $rounded = sprintf '%.2f', $number;
say "$number => $rounded";
}
foreach my $number (@numbers) {
$number += 100;
my $rounded = sprintf '%.2f', $number;
say "$number => $rounded";
}
Run Code Online (Sandbox Code Playgroud)
它输出:
0.254 => 0.25
0.255 => 0.26
0.256 => 0.26
100.254 => 100.25
100.255 => 100.25
100.256 => 100.26
Run Code Online (Sandbox Code Playgroud)
对我来说,Perl与舍入不一致是很奇怪的.我希望以.255结尾的两个数字都被舍入为.26这对于0.255是正确的,但对于数字100.255它是错误的
以下是Perl Cookbook的报价http://docstore.mik.ua/orelly/perl/cookbook/ch02_04.htm
sprintf.f格式允许您指定特定数量的小数位以将其参数舍入到.Perl查看下面的数字,如果它是5或更大,则向上舍入,否则向下舍入.
但我在http://perldoc.perl.org/functions/sprintf.html中看不到任何证据证明它是正确的
这是sprintf或Perl …