我想创建一个小函数,它应该在控制台中以百分比显示当前状态.该函数应仅显示行中的当前值.所以我必须删除最后一个输出.那可能吗?最好的情况是一些ANSI C的东西,该程序应该适用于Linux和Windows.
我找到了一些类似的转义序列"\033[J",但它不起作用.
编辑
好吧,我尝试过:
void PrintProcessBar(int i, int n) {
float ratio = i / (float)n;
printf("%.3d\b\b", (int)(ratio * 100));
fflush(stdout);
}
Run Code Online (Sandbox Code Playgroud)
但它只打印了很多零...出了什么问题?如果我用三个,\b我什么也得不到.
解
float ratio = (i / (float)n) * 100;
printf("\b\b\b\b");
fflush(stdout);
printf("%.3d%c", (int)ratio, 37);
fflush(stdout);
Run Code Online (Sandbox Code Playgroud)
i =当前位置.n =最大运行.
我使用4 \b因为,在第一次调用函数时它将删除4个空格.
格尔茨.
我正在使用VisualStudio和MFC在C++中编程(只是偶尔).我用fopen和fprintf写了一个文件.该文件应以UTF8编码.有没有可能这样做?无论我尝试什么,该文件都是双字节unicode或ISO-8859-2(latin2)编码.
Glanebridge
在F#中,你如何理解接受可变数量参数的函数?
我有这样的代码...(日志功能只是一个例子,确切的实现并不重要)
let log (msg : string) =
printfn "%s" msg
log "Sample"
Run Code Online (Sandbox Code Playgroud)
它使用sprintf格式化的字符串在整个代码中调用,例如.
log (sprintf "Test %s took %d seconds" "foo" 2.345)
Run Code Online (Sandbox Code Playgroud)
我想在日志函数中讨论sprintf功能,看起来像......
logger "Test %s took %d seconds" "foo" 2.345
Run Code Online (Sandbox Code Playgroud)
我尝试过类似的东西
let logger fmt ([<ParamArray>] args) =
log (sprintf fmt args)
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何将ParamArray参数传递给sprintf调用.
这是如何在F#中完成的?
可能重复:
如何printf uint64_t?
我想u_int64_t用C 打印.我想知道格式说明符吗?我是C用户,我想做一个printf().
我正在学习再次使用汇编语言,到目前为止我遇到的唯一问题就是调用C语言.我所拥有的书是32位,而我的工作是64位.显然,调用约定存在很大差异,并且http://www.x86-64.org/documentation站点已关闭.因此,经过一些挖掘/测试,在C中编译虚拟程序并花费3天时间,我想我会发布我的发现,如果它可以帮助其他人.
RAX是否需要给出浮点数?堆栈填充"阴影空间"16或32位?这个宏用于对齐小程序的堆栈是否可以通过?我知道你可以用对齐NOP填充代码,我不确定堆栈框架.
; pf.asm compiled with 'nasm -o pf.o -f elf64 -g -F stabs'
; linked with 'gcc -o pf pf.o'
; 64-bit Bodhi (ubuntu) linux
%include "amd64_abi.mac"
[SECTION .data]
First_string: db "First string.",10,"%s", "%d is an integer. So is %d",10
db "Floats XMM0:%5.7f XMM1:%.6le XMM2:%lg",10,0
Second_String: db "This is the second string... %s's are not interpreted here.",10
db " Neither are %d's nor %f's. 'Cause it is a passed value.", 10, 0
; Just a regular string …Run Code Online (Sandbox Code Playgroud) 最近的安全通知(http://osdir.com/ml/bugtraq.security/2015-04/msg00102.html)声明这行代码:
fprintf(stderr, (isprint(adata->contents[i])) ? "%c " : "%02x", adata->contents[i]);
Run Code Online (Sandbox Code Playgroud)
受到" 格式字符串攻击 "的影响我理解为使用类似的东西:
fprintf(stderr, varWithUserSuppliedData);
Run Code Online (Sandbox Code Playgroud)
代替:
fprintf(stderr, "%s", varWithUserSuppliedData);
Run Code Online (Sandbox Code Playgroud)
但是我没有在第一次fprintf电话中看到这一点 - 我错过了什么?
我有一个使用VS2013的非unicode(MBCS)C++项目构建.
给定一个BSTR值,我应该如何安全地将它传递给printf?
这是我的代码
#include <stdio.h>
int x,y;
int main( void )
{
for ( x = 0; x < 10; x++, printf( "\n" ) )
for ( y = 0; y < 10; y++ )
printf( "%c", 1 );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它会回归笑脸.我到处搜索笑脸的代码或1的代码但我没有设法找到任何链接或任何解释为什么1的char值返回笑脸,当1的ascii代码是SOH时.我研究了这个问题的答案,但我没有找到解释为什么会发生这种情况的答案.
我试图?通过将相应的十进制值传递给printf 来打印出来.输出什么都没有.为什么我的代码不起作用?
#include <stdio.h>
int main()
{
printf("%lc",536);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我一直遇到下面的代码问题,我想了解为什么它不起作用.当我直接在结构中使用一个从函数返回的字符串时,我得到了一个奇怪的行为.
第一个printf没有问题,与第二个和第三个相同,但由于某种原因,最后一个进入分段错误或只打印一个随机字符串.如果我尝试在结构中使用字符指针而不是数组,则问题不会出现.
#include <stdio.h>
typedef struct
{
int value;
char string[23];
} Test;
Test func()
{
Test nuovo = {5, "test"};
return nuovo;
}
int main()
{
Test test = func();
printf("\n1: %d", func().value);
printf("\n2: %s", test.string);
printf("\n3: %s", &(func().string[0]));
printf("\n0: %s", func().string);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
====================[ Build | test | Debug ]====================================
"C:\Program Files\JetBrains\CLion 2018.2.6\bin\cmake\win\bin\cmake.exe" --build C:\Users\rober\CLionProjects\test\cmake-build-debug --target test -- -j 4
"C:\Program Files\JetBrains\CLion 2018.2.6\bin\cmake\win\bin\cmake.exe" -SC:\Users\rober\CLionProjects\test -BC:\Users\rober\CLionProjects\test\cmake-build-debug --check-build-system CMakeFiles\Makefile.cmake 0
C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\Makefile2 test
mingw32-make.exe[1]: Entering directory 'C:/Users/rober/CLionProjects/test/cmake-build-debug' …Run Code Online (Sandbox Code Playgroud)