标签: printf

将float的值打印到2位小数

我有一个值为57.400002的浮点数.我用来sprintf_s在GUI上显示值.

sprintf_s(xPosition, 19, "%f", xPositionValue);
Run Code Online (Sandbox Code Playgroud)

如何格式化浮点数,使其显示为57.40?

c++ format floating-point winapi printf

5
推荐指数
2
解决办法
3161
查看次数

创建导致字符串的FILE*流

我正在寻找一种方法来传递一个FILE *函数,以便函数可以写入它fprintf.如果我想让输出在磁盘上的实际文件中出现,这很容易.但我想要的是将所有输出作为字符串(char *).我喜欢的那种API是:

/** Create a FILE object that will direct writes into an in-memory buffer. */
FILE *open_string_buffer(void);

/** Get the combined string contents of a FILE created with open_string_buffer
    (result will be allocated using malloc). */
char *get_string_buffer(FILE *buf);

/* Sample usage. */
FILE *buf;
buf = open_string_buffer();
do_some_stuff(buf);   /* do_some_stuff will use fprintf to write to buf */
char *str = get_string_buffer(buf);
fclose(buf);
free(str);
Run Code Online (Sandbox Code Playgroud)

在glibc的头似乎表明,一个文件可能被设置了挂钩函数来执行实际的读写.在我的情况下,我想我希望写钩子将字符串的副本附加到链表,并且有一个get_string_buffer函数可以计算出列表的总长度,为它分配内存,然后将每个项目复制到它在正确的地方.

我的目标是可以传递给函数的东西,比如do_some_stuff …

c string printf file stream

5
推荐指数
1
解决办法
1890
查看次数

Qt qDebug()在Windows shell中不起作用

我在屏幕上使用qDebug()Qt框架printf.当我从Qt Creator运行应用程序时它工作得很好,但是当我尝试从Windows执行它时cmd它什么也没显示.为什么会这样?

printf qt console-application qdebug

5
推荐指数
1
解决办法
4015
查看次数

How to print a Chinese character?

How do I print a Chinese or Japanese character (non-English) in C?

wchar *wc = (wchar *)calloc(50,sizeof(wchar*));
wcscpy(wc ,L"john ???");
printf(" wc : %S \n",wc);
Run Code Online (Sandbox Code Playgroud)

I got john only in my output.

c printf

5
推荐指数
1
解决办法
4192
查看次数

printf中的三元运算符

读完这篇文章后,我开始认为我已经学会了一个战利品printf().突然,我发现从下面的代码片段这本书:

int main()
{
    char str[]="Hello";
    int i=5,j=10;
    printf(i>j?"%50s":"%s",str); //unable to understand this 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,上面的代码运行没有错误,它打印Hello.根据我的知识,以下是语法printf():

int printf(const char *format,argument_list);
Run Code Online (Sandbox Code Playgroud)

所以根据这种语法,printf()应该从格式字符串开始.但正如您在上面的代码中printf()所看到的那样i>j. 这是否意味着我在解释printf()的语法时出错了?将三元运算符放在printf()中是一种特殊情况吗?

编辑

我知道三元运算符我问的第一个参数printf()应该是const char*,我似乎不在我的例子中.

c syntax printf conditional-operator

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

在Matlab中更改fprintf()的默认NaN表示

我试图从数据中Matlab的将被其他应用程序可以理解的格式导出......对,我需要改变NaN,Inf并-Inf串(即Matlab的打印默认情况下,这样的值)//m,//inf+和//Inf-.

一般来说,我知道如何实现这一目标.我在询问如何(以及是否可能)在Matlab中利用一个特定的东西.实际问题位于最后一段.

我尝试过两种方法(代码如下).

  1. 使用sprintf()的数据和strrep()输出.这是以逐行方式完成的,以节省内存.该解决方案的时间比简单多出近10倍fprintf().优点是它具有低内存开销.
  2. 与选项1相同,但翻译是在整个数据上完成的.此解决方案更快,但容易出现内存不足异常.我对这种方法的问题是我不想不必要地复制数据.

码:

rows = 50000  
cols = 40  
data = rand(rows, cols); % generate random matrix  
data([1 3 8]) = NaN; % insert some NaN values  
data([5 6 14]) = Inf; % insert some Inf values  
data([4 2 12]) = -Inf; % insert some -Inf values  

fid = fopen('data.txt', 'w'); …
Run Code Online (Sandbox Code Playgroud)

matlab printf

5
推荐指数
1
解决办法
1178
查看次数

为什么使用`%s`来使用`printf`打印字符串而不是直接打印它更好?

我知道声明printf是:

int printf ( const char * format, ... );
Run Code Online (Sandbox Code Playgroud)

这意味着可以直接打印字符串而不是使用%s和字符串作为参数.请参阅以下代码:

char str[50];
char *ptr;
//initialize str and ptr

printf(str);  //BAD
printf(ptr);  //BAD
printf("%s",str);  //GOOD
printf("%s",ptr); //GOOD
Run Code Online (Sandbox Code Playgroud)

我已经读过直接打印字符串,如前两个printfs所示是坏的,应该总是避免这样做.相反,使用%s最后两个printfs中显示的更好.它们都正确打印两个字符串.

那么,为什么使用%s打印字符串printf而不是直接打印它更好呢?
当一个人不使用%s打印字符串时会出现什么问题printf?

c string printf

5
推荐指数
0
解决办法
147
查看次数

C编程的好方法

我目前编程自己的实现printf,这里是代码:

int my_printf(const char *format, ...)
{
        //Declare variable ou prog fonctionnel????
        va_list args;
        int numberValue;
        unsigned int unsignedNumberValue;
        double doubleValue;
        char* stringValue;
        char charValue;
        va_start(args, format);
        for(int i = 0; format[i]; i++){
                //This case is the most called case, so we test it first to get the
                //best perfs
                if(format[i] != '%'){
                        my_put_char(format[i]);
                }else{
                        if(format[i+1] == 'd' || format[i+1] == 'i'){
                                numberValue = va_arg(args, int);
                                my_put_nbr(numberValue);
                        }else if(format[i+1] == 'u'){
                                unsignedNumberValue = va_arg(args, unsigned int);
                                my_put_nbr_unsigned(unsignedNumberValue);
                        }else …
Run Code Online (Sandbox Code Playgroud)

c printf memory-management

5
推荐指数
1
解决办法
197
查看次数

具有%g的宽度和精度字段的fmt.Printf意外地表现

我试图得到一些使用相同宽度格式化的浮点数fmt.Printf().

例如,给定浮点值0.0606060606060606,0.3333333333333333,0.05,0.4和0.1818181818181818,我想将每个值格式化为10符文:

0.06060606
0.33333333
      0.05
       0.4
0.18181818
Run Code Online (Sandbox Code Playgroud)

但我无法理解它是如何完成的.文档说

对于浮点值,width设置字段的最小宽度,precision设置小数点后的位数(如果适用),但%g /%G除外,它设置总位数.例如,给定123.45格式%6.2f打印123.45而%.4g打印123.5.%e和%f的默认精度为6; 对于%g,它是唯一标识值所需的最小位数.

因此,如果我使用%f较大的数字将不适合10个字符的约束,因此%g是必需的.要获得最小宽度为10 %10g并获得最大数量的9位数(点的+1)%.9g,但将它们组合起来%10.9g并不像我期望的那样

0.0606060606
0.333333333
      0.05
       0.4
0.181818182
Run Code Online (Sandbox Code Playgroud)

为什么我得到10符文的字符串,其他的符文是11符文,其他符号是12符文?

特别是,似乎%.9g总共不产生9位数.参见例如:http://play.golang.org/p/ie9k8bYC7r

printf go

5
推荐指数
1
解决办法
1136
查看次数

如何将字符串赋值给int并将该int传递给printf正确打印字符串?

为什么这样做?(即如何传递int给printf()打印字符串的结果)

#include<stdio.h>

int main() {
    int n="String";
    printf("%s",n);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

警告:初始化从指针生成整数而没有强制转换[默认情况下启用]
int n ="String";
警告:格式'%s'需要类型'char*'的参数,但参数2的类型为'int'[-Wformat =]
printf("%s",n);

输出:字符串

编译器:gcc 4.8.5

c string int printf

5
推荐指数
2
解决办法
195
查看次数