我们来做一些四舍五入
> round(-0.001, 2)
[1] 0
Run Code Online (Sandbox Code Playgroud)
我收到零.
现在与sprintf结合使用
> sprintf("%f", round(-0.001,2))
[1] "-0.000000"
Run Code Online (Sandbox Code Playgroud)
为什么有减号?我期待0.000000.
$R --version
R version 2.13.1 (2011-07-08)
Run Code Online (Sandbox Code Playgroud) 我搜索过高和低,但在C中的printf中,似乎只有零填充和空白填充.我想写自己的填充,在这种情况下使用星号.
例如,
假设宽度为8个字符.
输入:123
输出:**123.00
输入:3
输出:****3.00
我怎样才能做到这一点?
我想创建这样的东西,其中每一行都被"管道"字符包围.
| First Line |
| 100 200 |
| 1000 2000 |
Run Code Online (Sandbox Code Playgroud)
我试图通过printf +格式化(并没有明确计算填充数),但我在格式化语法方面遇到了一些麻烦.这是我目前的代码:
System.out.printf("| FIRST LINE" + "%50s\n", "|");
System.out.printf("| 100 200" + "%50s", "|");
System.out.printf("| 1000 2000" + "%50s", "|");
Run Code Online (Sandbox Code Playgroud)
我试图指出每行的最大值是50个字符,是行中第一个字符"管道",而行中的最后一个字符是另一个"管道").
问题是50个空格的放置没有考虑到左侧部分已经使用的字符(即"|第一行").上面的代码类似于:
System.out.format("%s %50s\n", "| FIRST LINE", "|");
Run Code Online (Sandbox Code Playgroud)
那么,我如何定义输出格式,以便考虑宽度两个字符串?
提前致谢.
这是工作原始代码:
// ...
unsigned __int64 num = 57;
sprintf_s(buffer, sizeof(buffer), "%llu", num);
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将此部分提取到此函数中时:
void addBuffered(void** attributeValue, char* format)
{
sprintf_s(buffer, sizeof(buffer), format, *attributeValue);
}
Run Code Online (Sandbox Code Playgroud)
致电:
addBuffered((void**)&num, "%d");
Run Code Online (Sandbox Code Playgroud)
我必须要改变的格式参数sprintf_s从%llu以%d得到正确的值.有人可以解释为什么会发生这种情况,如果参数的变化%d可能是个问题吗?谢谢!
以下代码如何工作?
void main()
{
printf("%d", printf("earth"));
}
Run Code Online (Sandbox Code Playgroud)
这给出了输出:earth5.
我想弄清楚为什么sprintf在这里返回false.谁能摆脱任何光明?
sprintf( "select dog_name, date_format(meet_date, '%D %M %Y') as date, track_name, race_name, race_stakes, race_class, race_stakes, result_place, result_box, winner_name, winner_id, result_dog_trainer, race_distance
from dog
join result using( dog_id )
join race r using( race_id )
join meet using( meet_id )
join track using( track_id )
join (select dog_name as winner_name, dog_id as winner_id, race_id
from dog
join result using( dog_id )
where result_place = 1
) t0 on t0.race_id = r.race_id
where dog_id = %d
order by meet_date desc
limit %d", …Run Code Online (Sandbox Code Playgroud) 我知道这是一个非常愚蠢而简单的问题,但我一直在尝试打印一个机器人的图像,该图像应该输出:
+----------+
| |
| /\ /\ |
| \/ \/ |
| |
| [-=-=-] |
+----------+
Run Code Online (Sandbox Code Playgroud)
我坚持的部分是打印出来的眼睛.最初我编码:
printf("| /\ /\ |");
printf("| \/ \/ |");
Run Code Online (Sandbox Code Playgroud)
但是显示错误,所以我记得你需要加倍斜杠所以:
printf("| \/\\ \/\\ |");
printf("| \\\/ \\\/ |");
Run Code Online (Sandbox Code Playgroud)
但是一个错误说隐含的函数printf声明甚至在那之后显示了?!我不明白这个错误.有人可以解释一下如何解决这个问题吗?
我不能在这个命令中弄错我:
a=2
b=5
c=3
printf "%.2f\t" "'$a'+'$c'*'$b'" > ofile.txt
Run Code Online (Sandbox Code Playgroud)
我得到的值为50.00.但我应该得到17.00.
当a,b,c是浮动值时如何做到这一点?例如a = 2.4,b = 5.1和c = 3.2
我的printf语句有点麻烦.我无法准确地得到它们.这是我遇到问题的代码段.
while(choice != 4){
if(choice == 1){
System.out.println("NAME ID GPA\n");
for(j = 0; j < i ;j++){
System.out.printf("%s", fullName[j]);
System.out.printf("%10d", id[j]);
System.out.printf("%15.2f\n", gpa[j]);
}
System.out.println("");
}
Run Code Online (Sandbox Code Playgroud)
它打印出来.
NAME ID GPA
Hoffman Caleb Joseph 1 4.00
Jones Bob Cray 2 3.80
Mitten Jose Crush 3 1.53
Run Code Online (Sandbox Code Playgroud)
我怎样才能把它全部排好?
我在我的C++ GUI应用程序中使用Unicode字符串作为图标,并希望摆脱u8"\uf118"我所散布的所有魔术字符串,并且在途中,使这些字符串成为他们自己的类型.
所以我创建了一个这样的类:
struct icon
{
explicit constexpr icon(const char (&unicode_icon)[4]) :
_icon{ unicode_icon[0], unicode_icon[1], unicode_icon[2], unicode_icon[3] }
{
}
operator const char*() const
{
return _icon.data();
}
private:
std::array<char, 5> _icon;
};
Run Code Online (Sandbox Code Playgroud)
GUI库使用某种形式printf(我认为vfprintf)所以代码调用:
icon smiley { u8"\uf118" };
printf("%s", smiley);
Run Code Online (Sandbox Code Playgroud)
我到目前为止在Windows上对此进行测试并且效果很好,但是当我使用gcc(5.1)在Linux上编译它时,我收到以下警告:
main.cpp:22:24: warning: format '%s' expects argument of type 'char*', but argument 2 has type 'icon' [-Wformat=]
printf("%s", smiley);
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我在内部遇到了一个seg故障,vfprintf因为它没有使用我提供的强制转换运算符.
我知道当我将图标传递给GUI库时,我可以显式地转换图标(它有以下原型,(const char* fmt, ...)但这会让我写更多的代码,而且,它看起来会更糟.
有没有办法让编译器发挥魔力并允许我像这样调用函数:( printf("%s", smiley);或其他一些简单的方法)?