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) 我写了一个使用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正确地工作.我的问题是:
va_list/va_arg/va_start/va_end/va_arg不能用于printf64位整数和double/float?__builtin_va_start/__builtin_va_arg/__builtin_va_end/__builtin_va_list,为什么gcc会提示"未定义引用abort'"? But I can …以下两个简单的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.
我正在使用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 ++新手)
使用sprintf和一般语法"%A.B"我可以这样做:
double a = 0.0000005l;
char myNumber[50];
sprintf(myNumber,"%.2lf",a);
Run Code Online (Sandbox Code Playgroud)
我可以在格式字符串中动态设置A和B吗?
我有一个在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输出:
这只是在我测试我分离的更大程序的一部分时发生的.原始函数将以我需要的特殊方式从字符串中删除非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++,他们使用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) 不应该返回类型的返回size_t?因为C中对象的大小属于这种类型,包括传递给的字符串printf.
如何printf从浮点数中提取数字等函数?我理解原则上可以做到这一点.给定一个x你希望得到第一个n数字的数字,x用10的幂来缩放,这x是在pow(10, n)和之间pow(10, n-1).然后转换x为整数,并取整数的数字.
我尝试了这个,它有效.有点.我的答案与printf前16个十进制数字给出的答案相同,但之后的答案往往不同.怎么printf做?