标签: printf

什么时候使用printf/scanf vs cout/cin?

我正在使用MinGW的g ++测试我在网上发现的一些片段.这是C++编译器...为什么它才能正确编译C ....为什么人们会交织C和C++.

具体问题是:使用C和C++并在g ++下编译是否可以.如果答案是肯定的,那么我的生活很简单,因为我不需要修改代码.

奇怪的是......让一些C++工作,特别是在将字符串传递给ifstream构造函数时,它需要一个C类型的字符串......

我的猜测是,因为C++有时会依赖于C构造,所以可以将两种语言一起编写.

但是,作为一种风格问题,你应该坚持cout/ cin或printf/ scanf.

c c++ printf iostream scanf

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

非常令人惊讶的fprintf对比std :: ofstream(fprintf很慢)

我正在运行一些基准测试,以找到最有效的方法将大型数组写入C++文件(ASCII中超过1Go).

所以我将std :: ofstream与fprintf进行了比较(参见下面我使用的开关)

    case 0: {
        std::ofstream out(title, std::ios::out | std::ios::trunc);
        if (out) {
            ok = true;
            for (i=0; i<M; i++) {
                for (j=0; j<N; j++) {
                    out<<A[i][j]<<" ";
                }
                out<<"\n";
            }
            out.close();
        } else {
            std::cout<<"Error with file : "<<title<<"\n";
        }
        break;
    }
    case 1: {
        FILE *out = fopen(title.c_str(), "w");
        if (out!=NULL) {
            ok = true;
            for (i=0; i<M; i++) {
                for (j=0; j<N; j++) {
                    fprintf(out, "%d ", A[i][j]);
                }
                fprintf(out, "\n");
            }
            fclose(out);
        } else …
Run Code Online (Sandbox Code Playgroud)

c++ printf ofstream

8
推荐指数
1
解决办法
6712
查看次数

分段故障(核心转储)

我是相对较新的C,我试图运行一个简单的程序,我得到这个错误消息:分段错误(核心转储)我只想打印数组位的任何值,但我不能,我会感激任何帮助关于这个错误.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <malloc.h>

int main()
{
    const long int N = 1000000000;
    const int smallN = 125000000;
    char bits[smallN];

    for(int i=0; i<smallN; i++){
        bits[i]=0xff;
    }

    printf("character = %c \n", bits[5]);
}
Run Code Online (Sandbox Code Playgroud)

c printf coredump segmentation-fault

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

无法理解使用printf的程序输出

当我找到这段代码时,我正在处理一些面试问题.

#include<stdio.h>
int main()
{
 short int a=5;

 printf("%d"+1,a);    //does not give compiler error 

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

它打印以下内容:

d
Run Code Online (Sandbox Code Playgroud)

我无法理解printf函数如何在这里工作.

c printf

8
推荐指数
2
解决办法
557
查看次数

如何控制C printf%e中'e'后的指数位数?

我想控制C中'e'后的指数位数printf %e?

例如,C printf("%e")结果2.35e+03,但我想2.35e+003,我需要3位数的指数,我该如何使用printf?

码:

#include<stdio.h>
int main()
{
    double x=34523423.52342353;
    printf("%.3g\n%.3e",x,x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果: http ://codepad.org/dSLzQIrn

3.45e+07
3.452e+07
Run Code Online (Sandbox Code Playgroud)

我想要

3.45e+007
3.452e+007
Run Code Online (Sandbox Code Playgroud)

但有趣的是,我在Windows中使用MinGW获得了正确的结果.

c printf

8
推荐指数
1
解决办法
7686
查看次数

printf("%.d", 0) 和 printf("%.1d", 0) 有什么区别?

我正在重新编码printf,现在我被精度标志阻止了一会儿。所以我读到类型转换说明符d为 1时的默认精度:

默认精度

所以我认为%.dand之间没有区别%.1d,但是当我测试时:

printf(".d =%.d, .1d= %.1d", 0, 0);
Run Code Online (Sandbox Code Playgroud)

我确实找到了一个:

printf(".d =%.d, .1d= %.1d", 0, 0);
Run Code Online (Sandbox Code Playgroud)

c precision io formatting printf

8
推荐指数
2
解决办法
151
查看次数

Win10破解了printf函数

#include <stdio.h>
int main()
{
    float f = 1717.7890625;
    printf( "%.6f", f );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我使用 Visual Studio 19 (16.9.2) 为 x64 arch 编译了这段代码,并在我的两台 Windows 10 PC 上运行了结果:

  1. 版本 1909(操作系统版本 18363.1440)-> 调试和发布: 1717.789063
  2. 版本 2004(操作系统版本 19041.867)-> 调试:1717.789063发布:1717.789062

新版本Debug和Release结果不一样的原因是什么?如何修复它以使两个版本的结果相同?

补充: 代码:

#include <stdio.h>
int main()
{
    double f = 0.25;
    printf( "%.1f", f );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在新的和旧的 Win10 版本上有相同的行为。我建议,这是较新的 ucrtbase.dll 版本中的错误

c printf windows-10

8
推荐指数
1
解决办法
1119
查看次数

Raku,Perl 的 5 `&lt;&gt;` 在哪里?

我正在进一步使用 Raku 的 CommaIDE,我想逐行打印一个二进制文件。我试过这个,但它不起作用:

for "G.txt".IO.lines -> $line {
    say $_;
    }
Run Code Online (Sandbox Code Playgroud)

我该如何解决?这显然是不正确的。

编辑 这也不起作用,请参阅下面的代码段

for "G.txt".IO.lines -> $line {
    say $line;
    }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

printf while-loop raku commaide

8
推荐指数
2
解决办法
211
查看次数

混淆 .fmt 行为与嵌套列表

文档说​fmt

\n
\n

返回一个字符串,其中列表中的每个元素均已根据$format[第一个参数] 进行格式化,并且每个元素均由$separator[第二个参数] 分隔。

\n
\n

根据该描述,我希望能够调用.fmt列表列表,然后传递一个printf-style 格式字符串,其中%包含内部列表中每个元素的指令。但这是行不通的。

\n

如果您告诉我我对 ^^^^ 的看法是错误的,我会期望它.fmt会自动展平其参数,因此每个参数都会被格式化并由$separator. 但事实并非如此。

\n

相反,运行此代码

\n
\nsay (<a b c>, <1 2 3>, <X Y Z>).fmt(\'\xe2\x86\x92%03s|\', "\\n=================\\n");\n
Run Code Online (Sandbox Code Playgroud)\n

产生这个输出:

\n
\xe2\x86\x9200a| \xe2\x86\x9200b| \xe2\x86\x9200c|\n=================\n\xe2\x86\x92001| \xe2\x86\x92002| \xe2\x86\x92003|\n=================\n\xe2\x86\x9200X| \xe2\x86\x9200Y| \xe2\x86\x9200Z|\n
Run Code Online (Sandbox Code Playgroud)\n

也就是说,格式字符串应用于内部列表中的每个元素,然后对这些列表进行字符串化(不使用格式字符串;注意 每个|和\xe2\x86\x92字符之间),然后在每个外部列表之间插入分隔符列表之间插入分隔符。

\n

这给我留下了三个问题:

\n
    \n
  1. 我是否正确描述/理解了当前的行为?[编辑:不。见下文]
  2. \n
  3. 这种行为是故意的还是奇怪的错误?(我检查了 Roast,但没有看到任何东西)
  4. \n
  5. 假设这是故意的,为什么?有什么方法可以使这与 …

formatting printf nested-lists rakudo raku

8
推荐指数
1
解决办法
185
查看次数

Raku 格式

我编写了一个输出 a 的函数double,最多 25 位小数。我正在尝试将其打印为 Raku 的格式化输出。

但是,输出不正确且被截断。

参见 MWE:

my $var = 0.8144262510988963255087469;
say sprintf("The variable value is: %.25f", $var) 
Run Code Online (Sandbox Code Playgroud)

上面的代码给出的The variable value is: 0.8144262510988963000000000结果不是预期的结果。

另外,这看起来很奇怪:


my $var = 0.8144262510988963255087469;

say $var.Str.chars; # 29 wrong, expected 27

Run Code Online (Sandbox Code Playgroud)

我在以下位置测试了相同的内容C:

#include <stdio.h>

int main() {
   double var = 0.8144262510988963255087469;
   printf("The variable value is: %.25lf \n", var);

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

然而,它工作得很好。sprintf鉴于和的相同性质printf,我希望这个C示例也能在 Raku 中运行。好像%lf不支持。

那么有解决方法来解决这个问题吗?

printf rakudo raku

8
推荐指数
1
解决办法
273
查看次数