标签: printf

为什么将printf("%s")用于传递给泛型方法的参数?

package genericMethods;

public class OverloadedMethods {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Integer[] integerArray = {1, 2, 3, 4, 5};
        Double[] doubleArray = {1.0, 2.0, 3.0, 4.0, 5.0};
        Character[] charArray = {'a', 'b', 'c', 'd'};

        System.out.println("A has: ");
        printArray(integerArray);
        System.out.println("B has: ");
        printArray(doubleArray);
        System.out.println("C has: ");
        printArray(charArray);
    }

    public static <T> void printArray(T[] array)
    {
        for(T element : array)
            System.out.printf("%s ", element);//why use %s instead of others? 

        System.out.println();
    }

} …
Run Code Online (Sandbox Code Playgroud)

java printf

7
推荐指数
2
解决办法
3万
查看次数

使用gcc编译一个显示"未定义引用`abort'"的项目

我写了一个使用va_list/va_arg/va_start/va_end/va_arg的printf myselef.

typedef char *va_list;
#define  _AUPBND                (sizeof (acpi_native_int) - 1)
#define  _ADNBND                (sizeof (acpi_native_int) - 1)
#define _bnd(X, bnd)            (((sizeof (X)) + (bnd)) & (~(bnd)))
#define va_arg(ap, T)           (*(T *)(((ap) += (_bnd (T, _AUPBND))) - (_bnd (T,_ADNBND))))
#define va_end(ap)              (void) 0
#define va_start(ap, A)         (void) ((ap) = (((char *) &(A)) + (_bnd (A,_AUPBND))))
Run Code Online (Sandbox Code Playgroud)

首先,我从linux内核复制这些宏,printf可以打印32位整数正确但不能打印64位整数和打印double/float可能会失败或崩溃.然后我检查代码,我猜va_*可能有错误,所以我使用__builtin_va_*而不是内核的va_*.

typedef __builtin_va_list va_list;
#define va_start(v,l)   __builtin_va_start(v,l)
#define va_end(v)       __builtin_va_end(v)
#define va_arg(v,l)     __builtin_va_arg(v,l)
Run Code Online (Sandbox Code Playgroud)

但是gcc提示"未定义引用`abort'",所以我写了一个空的abort()和myprintf正确地工作.我的问题是:

  1. 为什么linux内核va_list/va_arg/va_start/va_end/va_arg不能用于printf64位整数和double/float?
  2. 当我使用时__builtin_va_start/__builtin_va_arg/__builtin_va_end/__builtin_va_list,为什么gcc会提示"未定义引用abort'"? But I can …

c linux printf variadic-functions

7
推荐指数
1
解决办法
6833
查看次数

"printf"和"print sprintf"之间的区别

以下两个简单的perl程序有不同的行为:

#file1
printf @ARGV;
Run Code Online (Sandbox Code Playgroud)

#file2
$tmp = sprintf @ARGV;
print $tmp;
Run Code Online (Sandbox Code Playgroud)

$> perl file1  "hi %04d %.2f" 5  7.12345
   #output:  hi 0005 7.12
Run Code Online (Sandbox Code Playgroud)

$> perl file2 "hi %04d %.2f" 5  7.12345
   #output:  3
Run Code Online (Sandbox Code Playgroud)

为什么有区别?我原以为这两个程序是等价的.不知道是否有办法让file2(使用"sprintf")表现得像file1.

perl printf

7
推荐指数
1
解决办法
1491
查看次数

以编程方式忽略printf

我正在使用someones库,当与设备的连接不成功时,printf会输出错误消息.连接成功时,库代码不会打印任何内容.

我定期检查(循环和睡眠)以查看设备是否已连接,但我只想在连接时打印出来.

目前我得到的结果如下:

Waiting for connection... (<-- My print)
Error
Error
Error
Error
Error
Connection successful (<-- My print)
Run Code Online (Sandbox Code Playgroud)

我想要的是:

Waiting for connection... (<-- My print)
Connection successful (<-- My print)
Run Code Online (Sandbox Code Playgroud)

我怎么能以编程方式忽略printf?

Nb我发现一个类似的问题编程忽略Cout但该解决方案不适用于printf.

我正在使用Windows.

有人可以帮忙吗?(c/c ++新手)

c++ printf

7
推荐指数
1
解决办法
485
查看次数

使用sprintf动态设置精度

使用sprintf和一般语法"%A.B"我可以这样做:

double a = 0.0000005l;
char myNumber[50];
sprintf(myNumber,"%.2lf",a);
Run Code Online (Sandbox Code Playgroud)

我可以在格式字符串中动态设置A和B吗?

c printf format-string

7
推荐指数
1
解决办法
709
查看次数

C++与sprintf绑定的舍入行为一致性

我有一个在Windows/Linux上运行的C++程序.在Windows上,程序是使用Visual Studio 2012和Linux编译的,它是使用GCC编译的.使用sprintf将双精度转换为字符串时,Visual Studio使用与GCC编译器不同的舍​​入方法进行绑定 - 即以5结尾的小数.

Visual Studio编译器似乎执行了从零开始的一半,而GCC 甚至绕过了名为银行家的四舍五入.

Round even是理想的行为.

是否可以在visual studio/windows中更改用于sprintf格式字符串的舍入行为?因为我需要使舍入在两者之间保持一致.

这是一个小样本C++程序,它说明了上述行为:

int main()
{   
   char buffer[100];

   double x;
   for (x = -0.5; x <= 10.5; x += 1.0)
   {
      sprintf(buffer,"%4g %.0f\n", x, x);

      std::cout << buffer;
   }  

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

Windows输出.数字从零开始舍入:

视窗

使用xCode编译的OSX输出.使用圆形甚至朝向偶数舍入数字:

OSX

OSX输出:

c++ printf gcc visual-studio

7
推荐指数
1
解决办法
610
查看次数

在`fwprintf'之后使用`fprintf'时无输出

这只是在我测试我分离的更大程序的一部分时发生的.原始函数将以我需要的特殊方式从字符串中删除非ascii字符,就是这个程序

#include <stdio.h>
#include <wchar.h>

int main(int argc, char *argv[])
{
    fwprintf(stdout, L"-- Example\n");
    fprintf(stdout, "-- Example\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不会-- Example在我的linux(Fedora 22)系统上打印第二个.虽然fwprintf()再次使用或fprintf(stderr, "-- Example\n");将工作.

  • 这是预期的行为吗?为什么?

c linux printf wchar-t stdio

7
推荐指数
1
解决办法
139
查看次数

C++打印速度比C快得多

我正在网上参加一个小型的编程竞赛.基本上我所做的就是解决任务,编写算法并发送我的代码,由竞争对手的服务器自动评估.

服务器接受各种编程语言.所有任务基本上都要求程序从终端获取输入并输出正确的终端.所以在竞争对手的网站上,我注意到他们支持的语言之一是C++,他们使用g ++来编译它.好吧,因为我不是那么流利的C++,而不是CI的想法,我会用C回答我的答案.

这对第一项任务非常有用.但是在第二个任务中,我经常达到程序执行时间的限制(2秒)

这是我的C代码:

#include <inttypes.h>
#include <stdio.h>
#include <stdint.h>
#include <math.h>
#include <stdlib.h>

uint8_t get_bit(uint64_t k) {
    ...
}

int main(int argc, char *argv[]) {
    uint64_t n;
    uint64_t k;
    scanf("%u", &n);

    uint64_t i;
    for (i = 0; i < n; i++) {
        scanf("%u", &k);
        printf("%d\n", get_bit(k));
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以我的算法定义在get_bit.服务器在我的程序上运行3个不同的测试,具有不同的值,大多数增加以使程序运行更长时间.

但是,由于运行时间超过2秒,因此C中的此代码未通过测试.几个小时尝试不同的解决方案无济于事,我终于尝试使用一些不同的打印方法将我的代码作为C++提交.

这是我的C++主程序(程序的其余部分基本保持不变):

int main(int argc, char *argv[]) {
    uint64_t n;
    uint64_t k;
    cin >> n;

    uint64_t i;
    for (i = 0; i < n; i++) …
Run Code Online (Sandbox Code Playgroud)

c c++ printf cout

7
推荐指数
1
解决办法
286
查看次数

为什么printf在C中返回int而不是size_t

不应该返回类型的返回size_t?因为C中对象的大小属于这种类型,包括传递给的字符串printf.

c printf

7
推荐指数
1
解决办法
349
查看次数

printf如何从浮点数中提取数字?

如何printf从浮点数中提取数字等函数?我理解原则上可以做到这一点.给定一个x你希望得到第一个n数字的数字,x用10的幂来缩放,这x是在pow(10, n)和之间pow(10, n-1).然后转换x为整数,并取整数的数字.

我尝试了这个,它有效.有点.我的答案与printf前16个十进制数字给出的答案相同,但之后的答案往往不同.怎么printf做?

c c++ floating-point printf

7
推荐指数
1
解决办法
358
查看次数