标签: printf

四舍五入后,sprintf将减号添加为零

我们来做一些四舍五入

> 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)

printf r rounding negative-number

4
推荐指数
1
解决办法
841
查看次数

在printf中用星号填充?

我搜索过高和低,但在C中的printf中,似乎只有零填充和空白填充.我想写自己的填充,在这种情况下使用星号.

例如,

假设宽度为8个字符.

输入:123 输出:**123.00

输入:3 输出:****3.00

我怎样才能做到这一点?

c printf

4
推荐指数
1
解决办法
5781
查看次数

格式化输出以具有相同的列数

我想创建这样的东西,其中每一行都被"管道"字符包围.

| First Line |
| 100 200    |
| 1000 2000  |
Run Code Online (Sandbox Code Playgroud)
  • 在第一行中,右边的填充是1个空格.
  • 在第二行中,右边的填充是4个空格.
  • 在第三行是2个空格.

我试图通过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)

那么,我如何定义输出格式,以便考虑宽度两个字符串?

提前致谢.

java printf output-formatting

4
推荐指数
1
解决办法
1409
查看次数

C++为什么sprintf_s格式在与void指针一起使用时会改变?

这是工作原始代码:

// ...
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可能是个问题吗?谢谢!

c++ printf

4
推荐指数
1
解决办法
530
查看次数

为什么将printf的结果传递给另一个printf工作?

以下代码如何工作?

void main()
{
    printf("%d", printf("earth"));
}
Run Code Online (Sandbox Code Playgroud)

这给出了输出:earth5.

c printf

4
推荐指数
1
解决办法
284
查看次数

为什么sprintf在这里返回false?

我想弄清楚为什么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)

php printf string-parsing

4
推荐指数
1
解决办法
1833
查看次数

如何在C中打印斜杠(/或\)?

我知道这是一个非常愚蠢而简单的问题,但我一直在尝试打印一个机器人的图像,该图像应该输出:

+----------+
|          |
| /\    /\ |
| \/    \/ |
|          |
|  [-=-=-] |
+----------+
Run Code Online (Sandbox Code Playgroud)

我坚持的部分是打印出来的眼睛.最初我编码:

printf("| /\  /\ |");
printf("| \/  \/ |");
Run Code Online (Sandbox Code Playgroud)

但是显示错误,所以我记得你需要加倍斜杠所以:

printf("| \/\\  \/\\ |");
printf("| \\\/  \\\/ |");
Run Code Online (Sandbox Code Playgroud)

但是一个错误说隐含的函数printf声明甚至在那之后显示了?!我不明白这个错误.有人可以解释一下如何解决这个问题吗?

c printf

4
推荐指数
1
解决办法
4万
查看次数

Linux中print命令中的数学表达式

我不能在这个命令中弄错我:

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

linux shell printf

4
推荐指数
1
解决办法
143
查看次数

我无法让我的printf语句在java中对齐

我的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)

我怎样才能把它全部排好?

java printf

4
推荐指数
1
解决办法
63
查看次数

调用printf时隐式转换为char*

我在我的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);或其他一些简单的方法)?

c++ printf gcc variadic-functions c++11

4
推荐指数
1
解决办法
270
查看次数