我找到了以下C++代码(评论自己添加):
// frame_name is a char array
// prefix is std::string
// k is a for loop counter
// frames is a std::vector string
sprintf(frameName, "%s_%0*s.bmp", prefix.c_str(), k, frames[k].c_str());
Run Code Online (Sandbox Code Playgroud)
然后我尝试将其翻译为C#
// prefix is string
// k is a for loop counter
// frames is List<string>
string frameName = string.Format("{0}_(what goes in here?).bmp", prefix, k, frames[k]);
Run Code Online (Sandbox Code Playgroud)
基本上,C++格式字符串"%s_%0*s.bmp"的C#等价物是什么?
编辑,@ Mark Byers:
我已经尝试了你的代码并做了一个小测试程序:
static void Main(string[] args)
{
List<string> frames = new List<string>();
frames.Add("blah");
frames.Add("cool");
frames.Add("fsdt");
string prefix = "prefix";
int n = …Run Code Online (Sandbox Code Playgroud) printf("by %1$s on %2$s", 'string1', 'string2');不起作用,而printf('by %1$s on %2$s', 'string1', 'string2');确实起作用.
我实际上正在设计一个Wordpress主题,并且非常密切地遵循原始的二十世纪主题.奇怪的是,我一直在所有以前的printf()语句中使用双引号,没有任何问题.
这似乎有点像计算系统101的问题,但我很难过.
我正在将C/C++项目A中的现有代码集成到我自己的项目B中.A和B都将链接到一个可执行的线程进程中.项目A的代码广泛使用printf进行输出.这很好,但我也希望将输出捕获到我自己的缓冲区中.一旦printf调用写入,我有没有办法从stdout读取?我不能分叉过程或管道.我对poll()stdout或者dup()的努力没有成功(我可能在这里做错了).
就我而言,两个INT_MAX数字的乘积296447233是不正确的.
long long int product = 0;
product = 2137483647 * 2137483647;
printf("product: %lli\n", product);
Run Code Online (Sandbox Code Playgroud)
我做错了什么,以及如何纠正它?谢谢 !
在C或Bash shell中使用printf,如何将两个字符串(字符数组)左右对齐到给定长度?
例如,如果字符串是"堆栈"和"溢出",并且长度是20个字符,我希望打印
stack-------overflow
Run Code Online (Sandbox Code Playgroud)
(为清楚起见,每个空间都显示为破折号).
字符串长度未知.如果总长度+ 1超过给定的长度,是否可以从给定方向截断一个或两个字符串并在它们之间留一个空格?例如,如果长度为10,我们可以得到这些吗?
stack-over
stack-flow
s-overflow
k-overflow
Run Code Online (Sandbox Code Playgroud)
我知道的printf("%10秒",字符串)证明一个字符串的权利和printf("% - 10秒",字符串)证明一个字符串的左边,但不能找到一种方法来证明2串,或截断他们.
我正在尝试编写一个Matlab程序,该程序从用户那里获取要显示的行数的输入,并相应地打印如下内容:
1
2 2
3 3 3
Run Code Online (Sandbox Code Playgroud)
......等等
现在我可以使用两个for循环获得此输出,但是可以使用一个for循环执行相同操作吗?具体来说,我想知道是否有一种方法可以将for循环的迭代值传递给sprintf/fprintf语句,以类似于'%3d'的方式格式化字符串,以便sprintf/fprintf语句知道每行要打印多少变量.希望不是太乱.
谢谢!
山塔努.
有人可以帮我理解下面的表达方式吗?
printf("%3d - %s\n", counter, name)
Run Code Online (Sandbox Code Playgroud)
那条线打印出这样的东西 6 - Install Adobe software
我已查阅信息并阅读参考资料,但我找不到简单的答案,我有点困惑.如果您可以参考我的好参考,请这样做.
%3d好吧,根据我的理解,%3d是字符或空格的数量.请指出一个解释它的参考.
%s\n我无法弄清楚这是做什么的.我猜\n是换行或类似的东西,但通过查看输出它似乎不像那样工作.
为什么counter和name变量用逗号分隔?
通过查看输出似乎%3d是一种替代counter和%s\n被替换name.我不确定它是如何工作的,但我想了解它.
我正在编写一个shell脚本(Mac OS X上的Bash)来重命名一堆图像文件.我希望结果如下:
frame_001
frame_002
frame_003
Run Code Online (Sandbox Code Playgroud)
等等
这是我的代码:
let framenr=$[1 + (y * cols * resolutions) + (x * resolutions) + res]
echo $framenr:
let framename=$(printf 'frame_%03d' $framenr)
echo $framename
Run Code Online (Sandbox Code Playgroud)
$framenr看起来是正确的,但$framename总是成为0.为什么?
我正在尝试使用-std = c ++ 11的g ++版本4.8.2中的snprintf编译代码,但没有成功.为什么g ++不能识别snprintf?我可以在使用snprintf和c ++ 11时克服这个问题吗?
我得到以下内容:
make all Building file: ../src/cppHWtest.cpp Invoking: Cygwin C++
Compiler g++ -std=c++11 -D"hash_map=unordered_map" -O0 -g3 -Wall -c
-fmessage-length=0 -MMD -MP -MF"src/cppHWtest.d" -MT"src/cppHWtest.d" -o "src/cppHWtest.o" "../src/cppHWtest.cpp" cygwin warning: MS-DOS style path detected: C:\Users\poudyal\workspace\cppHWtest\Debug
Preferred POSIX equivalent is:
/cygdrive/c/Users/poudyal/workspace/cppHWtest/Debug CYGWIN
environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames ../src/cppHWtest.cpp: In function 'int main()':
../src/cppHWtest.cpp:20:35: error: 'snprintf' was not declared in this
scope …Run Code Online (Sandbox Code Playgroud) 我有一个简单的代码来读取浮点数并以六位小数打印它。
我的 C 代码可以工作,我想制作一个与 Haskell 语言相同的代码,而不需要安装任何额外的库。
我的解决方案在 C 和 Haskell 中非常简单:
C:
#include <stdio.h>
int main() {
float n = 123.141568;
printf("%.6f\n", n); // 123.141571
return 0;
}
Run Code Online (Sandbox Code Playgroud)
哈斯克尔:
import Text.Printf (printf)
main = do
let n = 123.141568 :: Float
printf "%.6f\n" n -- 123.141570
Run Code Online (Sandbox Code Playgroud)
这些代码对于大多数数字都可以正常工作,但有一些不同的结果。例如,当n = 123.141568C 程序输出123.141571而 Haskell 程序输出123.141570. 如果我在 Haskell 中从 改为 ,Float结果Double是123.141568。
我的目标是让我的 Haskell 代码等于 C。我意识到即使在两种语言中使用 printf,舍入方法也是不同的,但我不知道这是如何发生的。
Float我尝试制作自定义舍入函数,但结果与(在上面的示例中123.141570)和Double( …