标签: format-specifiers

给定整数时如何不显示不必要的零,但在需要时仍然有浮动答案

我有一个我正在开发的应用程序,我的一个功能是在需要时给出float或double值的答案,当答案是整数时给出一个整数

所以例如如果答案是8.52,则答案变为8.52,但当答案为8时,答案是8而不是8.0000,我不希望它显示所有额外的0.

- (IBAction) equalsbutton {
NSString *val = display.text;
switch(operation) {

    case Plus :
        display.text= [NSString stringWithFormat:@"%qi",[val longLongValue]+[storage longLongValue]];

    case Plus2 :
        display.text= [NSString stringWithFormat:@"%f",[val doubleValue]+[storage doubleValue]];
Run Code Online (Sandbox Code Playgroud)

这段代码似乎不起作用

objective-c nsstring format-specifiers stringwithformat ios

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

%g printf说明符的确切含义是什么?

%g说明符似乎并不在多数来源记录它运行得的方式行事.

根据我发现的大多数来源,在使用printf说明符的多种语言中,说明%g符应该等同于%f或者%e- 对于提供的值产生较短的输出.例如,在撰写此问题时,cplusplus.com表示说明g符意味着:

使用最短的表示:%e%f

PHP手册说这意味着:

g - %e%f中的较短者.

而且这里有一个堆栈溢出的答案是声称,

%g 使用最短的表示.

Quora的回答声称:

%g 以这两个表示中最短的方式打印数字

但这种行为不是我在现实中看到的.如果我编译并运行该程序(作为C或C++ - 它是一个在两者中具有相同行为的有效程序):

#include <stdio.h>

int main(void) {
    double x = 123456.0;
    printf("%e\n", x);
    printf("%f\n", x);
    printf("%g\n", x);
    printf("\n");

    double y = 1234567.0;
    printf("%e\n", y);
    printf("%f\n", y);
    printf("%g\n", y);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

...然后我看到这个输出:

1.234560e+05
123456.000000
123456

1.234567e+06
1234567.000000
1.23457e+06
Run Code Online (Sandbox Code Playgroud)

显然, …

c language-agnostic floating-point printf format-specifiers

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

在scanf中使用[^表示法]的目的是什么?

我遇到了一些代码,并想知道最初的开发人员是做什么的.以下是使用此模式的简化程序:

      #include <stdio.h>

      int main()  {     

      char title[80] = "mytitle";      
      char title2[80] = "mayataiatale";      
      char mystring[80]; 

      /* hugh ? */
      sscanf(title,"%[^a]",mystring);
      printf("%s\n",mystring); /* Output is "mytitle" */


      /* hugh ? */
      sscanf(title2,"%[^a]",mystring); /* Output is "m" */
      printf("%s\n",mystring);


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

scanf手册页有相关信息,但我无法阅读它.使用这种表示法的目的是什么?它想要完成什么?

c scanf format-specifiers

6
推荐指数
1
解决办法
2817
查看次数

想要printf的解决方案

可能重复:
如何printf uint64_t?

我想u_int64_t用C 打印.我想知道格式说明符吗?我是C用户,我想做一个printf().

c compiler-construction printf format-specifiers

6
推荐指数
1
解决办法
6070
查看次数

scanf()函数中%符号后的#符号是什么意思?

以下代码在C中的含义是什么

scanf("%d%#d%d",&a,&b,&c);
Run Code Online (Sandbox Code Playgroud)

如果给定值,1 2 3则给出输出为1 0 0

PS-我知道它与printf()声明一起使用但在scanf()声明中它给出了随机行为.

c input scanf format-specifiers

6
推荐指数
1
解决办法
190
查看次数

为什么在printf格式字符串中使用%8.8而不是%08?

刚刚遇到一些(非常)遗留代码(最初编写为C但现在编译为C++)并使用宽度说明符将零填充字符串

void main()
{
    unsigned long val = 2413;
    printf("V1: %08lu \n", val);
    printf("V2: %8.8lu \n", val);
}
Run Code Online (Sandbox Code Playgroud)

结果是一样的

V1: 00002413
V2: 00002413
Run Code Online (Sandbox Code Playgroud)

那么为什么要使用V2呢?从昔日开始,它是std lib的遗留方面吗?

编译器详细信息:用于x86的Microsoft(R)C/C++优化编译器版本19.10.25019

c c++ printf format-specifiers visual-c++

6
推荐指数
4
解决办法
1866
查看次数

在 c 中使用带格式说明符的星号


printf("%*d",变量);


我想知道 printf 函数中 (*) 有什么用

printf arguments format-specifiers

6
推荐指数
1
解决办法
6390
查看次数

如何解决“格式中未知的转换类型字符‘z’”编译器特定的警告?

我正在处理交叉编译到多个目标架构的代码。

我看着少数 点击来自搜索堆栈溢出的的“printf的size_t未知的转换型性格”的警告,但这些职位似乎都涉及到minGW,所以这些问题的答案,基本上是ifdef荷兰国际集团对抗_WIN32,并不适用于我的基本上是相同的实例问题,即printf不识别“ %zu”作为 的格式说明符size_t,但使用mips交叉编译器。

是否有一个现有的编译器标志(针对上述交叉编译器)使 libc 能够将“%zu”识别为 的格式说明符size_t

$ cat ./main.c
// main.c

#include <stdio.h>

int main( int argc, char* argv[] )
{
  size_t i = 42;
  printf( "%zu\n", i );
  return 0;
}

$ /path/to/mips_fp_le-gcc --version
2.95.3
$ 
$ file /path/to/libc.so.6
/path/to/libc.so.6: ELF 32-bit LSB pie executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.2.15, not …
Run Code Online (Sandbox Code Playgroud)

c printf mips cross-compiling format-specifiers

6
推荐指数
1
解决办法
1539
查看次数

printf("%f",x) ok, printf("%F",x) 错误格式参数太多

当我在 CodeBlocks 中使用说明符 F 时,为什么编译器给我错误“格式参数太多”?

#include <stdio.h>

int main()
{
    float x = 3.14159;
    printf("%f\n", x);
    printf("%F\n", x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误:

#include <stdio.h>

int main()
{
    float x = 3.14159;
    printf("%f\n", x);
    printf("%F\n", x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c printf codeblocks format-specifiers

6
推荐指数
1
解决办法
253
查看次数

解释 printf("%# 01.1g",9.8) 中的格式说明符

考虑以下 printf 指令:

\n
printf("%# 01.1g", 9.8);\n
Run Code Online (Sandbox Code Playgroud)\n

它应该打印什么?

\n

我正在 cppreference.com 上阅读g说明符的描述,其中显示(已删除的文本G):

\n
\n

根据值和精度将浮点数转换为十进制或十进制指数表示法。

\n

对于g转换,将执行带有ef样式的样式转换。
如果非零,则令 P 等于精度;如果未指定精度,则令 P 等于精度;如果精度为 \xe2\x80\x8b0\xe2\x80\x8b,则令 P 等于精度。那么,如果使用e类型的\n转换将具有 X 的指数:

\n
    \n
  • 如果 P > X \xe2\x89\xa5 \xe2\x88\x924,则转换采用样式f和精度 P \xe2\x88\x92 1 \xe2\x88\x92 X。
  • \n
  • 否则,转换采用样式e和精度 P \xe2\x88\x92 1。
  • \n
\n

除非请求替代表示,否则尾随零将被删除,如果没有留下小数部分,小数点字符也会被删除。

\n
\n

在我们的例子中,

\n
    \n
  • P = 1 ,明确指定。
  • \n
  • X = 0,因为“使用样式e …

c floating-point printf format-specifiers language-lawyer

6
推荐指数
1
解决办法
157
查看次数