我正在使用MinGW的g ++测试我在网上发现的一些片段.这是C++编译器...为什么它才能正确编译C ....为什么人们会交织C和C++.
具体问题是:使用C和C++并在g ++下编译是否可以.如果答案是肯定的,那么我的生活很简单,因为我不需要修改代码.
奇怪的是......让一些C++工作,特别是在将字符串传递给ifstream构造函数时,它需要一个C类型的字符串......
我的猜测是,因为C++有时会依赖于C构造,所以可以将两种语言一起编写.
但是,作为一种风格问题,你应该坚持cout/ cin或printf/ scanf.
我正在运行一些基准测试,以找到最有效的方法将大型数组写入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,我试图运行一个简单的程序,我得到这个错误消息:分段错误(核心转储)我只想打印数组位的任何值,但我不能,我会感激任何帮助关于这个错误.
#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) 当我找到这段代码时,我正在处理一些面试问题.
#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中'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获得了正确的结果.
我正在重新编码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) #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 上运行了结果:
1717.7890631717.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 版本中的错误
我正在进一步使用 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)
文档说fmt
\n\n返回一个字符串,其中列表中的每个元素均已根据
\n$format[第一个参数] 进行格式化,并且每个元素均由$separator[第二个参数] 分隔。
根据该描述,我希望能够调用.fmt列表列表,然后传递一个printf-style 格式字符串,其中%包含内部列表中每个元素的指令。但这是行不通的。
如果您告诉我我对 ^^^^ 的看法是错误的,我会期望它.fmt会自动展平其参数,因此每个参数都会被格式化并由$separator. 但事实并非如此。
相反,运行此代码
\n\nsay (<a b c>, <1 2 3>, <X Y Z>).fmt(\'\xe2\x86\x92%03s|\', "\\n=================\\n");\nRun 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|\nRun Code Online (Sandbox Code Playgroud)\n也就是说,格式字符串应用于内部列表中的每个元素,然后对这些列表进行字符串化(不使用格式字符串;注意 每个|和\xe2\x86\x92字符之间),然后在每个外部列表之间插入分隔符列表之间插入分隔符。
这给我留下了三个问题:
\n我编写了一个输出 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 ×10
c ×6
raku ×3
c++ ×2
formatting ×2
rakudo ×2
commaide ×1
coredump ×1
io ×1
iostream ×1
nested-lists ×1
ofstream ×1
precision ×1
scanf ×1
while-loop ×1
windows-10 ×1